Vous êtes sur la page 1sur 54

PSA - Material de Apoio

APOSTILA DE INTRODUÇÃO À
CIÊNCIA DOS COMPUTADORES
Versão 1.0

José Francisco de Magalhães Netto jnetto@dcc.fua.br


Raimundo da Silva Barreto barreto@dcc.fua.br

Última Atualização 26/01/99 por Ruiter Braga Caldas - ruiter@dcc.fua.br

1
SUMÁRIO
INTRODUÇÃO..................................................................................................................4
NOÇÕES DE COMPUTADORES.........................................................................................5
.................................................................................................................5
1.1 EVOLUÇÃO HISTÓRICA DA COMPUTAÇÃO..............................................................5
1.2 GERAÇÕES DE COMPUTADORES...........................................................................6
1.3 FORMAS EM QUE SE APRESENTAM OS COMPUTADORES......................................6
1.4 ESTRUTURA BÁSICA DE UM COMPUTADOR............................................................7
1.7 CONVERSÃO DE NÚMEROS DECIMAIS EM BINÁRIOS E VICE-VERSA.....................11
CONVERSÃO DE NÚMEROS INTEIROS DECIMAIS EM NÚMEROS BINÁRIOS..............11
1.5.2. CONVERSÃO DE NÚMEROS INTEIROS BINÁRIOS EM NÚMEROS DECIMAIS....11
1.5.3. CONVERSÃO DE NÚMEROS FRACIONÁRIOS DECIMAIS EM NÚMEROS
BINÁRIOS................................................................................................................11
1.5.4. CONVERSÃO DE NÚMEROS FRACIONÁRIOS BINÁRIOS EM NÚMEROS
DECIMAIS................................................................................................................12
2. ALGORITMOS.............................................................................................................13
2.1. CONSTRUÇÃO DE ALGORITMOS..........................................................................13
2.2. DEFINIÇÃO DE ALGORITMOS...............................................................................15
2.3. REFINAMENTOS SUCESSIVOS.............................................................................16
2.4. ALGORITMOS ESTRUTURADOS..........................................................................16
2.5. O PORTUGOL.......................................................................................................17
2.6. IDENTIFICADORES...............................................................................................18
2.7. CONSTANTES......................................................................................................18
2.8. VARIÁVEIS...........................................................................................................18
2.9. COMENTÁRIOS....................................................................................................19
2.10. EXPRESSÕES ARITMÉTICAS..............................................................................19
2.11. EXPRESSÕES LÓGICAS......................................................................................19
2.12. EXPRESSÕES LITERAIS......................................................................................20
2.13. COMANDO DE ATRIBUIÇÃO...............................................................................20
2.14. COMANDOS DE ENTRADA E SAÍDA...................................................................20
2.15. ESTRUTURA SEQÜENCIAL................................................................................21
2.16. ESTRUTURA CONDICIONAL...............................................................................21
2.17. ESTRUTURA DE REPETIÇÃO..............................................................................22
3. CODIFICAÇÃO PASCAL...............................................................................................23
3.1 ESTRUTURA DE PROGRAMAS PASCAL..................................................................23
3.1.1 IDENTIFICADORES..........................................................................................23
3.1.2 CONSTANTES.................................................................................................23
3.1.3 VARIÁVEIS......................................................................................................24
3.1.4 COMENTÁRIOS...............................................................................................24
3.1.5 EXPRESSÕES ................................................................................................24
3.1.6 COMANDO DE ATRIBUIÇÃO............................................................................26
3.1.7 COMANDOS DE ENTRADA E SAÍDA................................................................27
3.1.8 ESTRUTURA CONDICIONAL............................................................................27
3.1.9 ESTRUTURA DE REPETIÇÃO...........................................................................28
3.1.10 REGRAS DE SINTAXE...................................................................................30
3.1.11 EXEMPLO DE CODIFICAÇÃO DE UM ALGORITMO EM PORTUGOL NA
LINGUAGEM PASCAL...............................................................................................31
4. LISTA DE EXERCÍCIOS...............................................................................................31
A. Noções de Computadores......................................................................................32
B.Conversão de Números Decimais em Binários e Vice-Versa..................................34
C. Introdução aos Algoritmos.....................................................................................35
D. Algoritmos.............................................................................................................36
6 . EXERCÍCIOS RESOLVIDOS........................................................................................43
Declare X, Y, Z numérico........................................................................................43
Declare X, Y, Z numérico........................................................................................44

2
Declare X, Y, Z numérico........................................................................................44
Declare N, X numérico...........................................................................................45
Declare N, X numérico............................................................................................46
Declare N numérico................................................................................................46
Declare N, Contador, Contador_Par, Contador_Impar numérico.............................47
Declare N, Contador_Par, Contador_Impar numérico..............................................48
Declare N, A, Soma, I numérico..............................................................................49
Declare A array[1..100] numérico..........................................................................50
Declare A array[1..100] numérico..........................................................................52
Algoritmo................................................................................................................53
Declare A array[1..100] numérico..........................................................................53

3
INTRODUÇÃO

O computador está cada vez mais presente no dia a dia de todos nós. Cada vez mais áreas
são abrangidas pela sua atuação, mudando a forma com que as pessoas trabalham e também
a maneira como as pessoas se relacionam entre si através da ampla disseminação das redes
de computadores.

Este texto é apenas uma pequena introdução neste vasto mundo da Informática. No âmbito
da Universidade do Amazonas as disciplinas Introdução à Ciência dos Computadores-
IEC081 e Introdução ao Processamento de Dados-IEC981, oferecidas pelo Departamento
de Ciência da Computação da Universidade do Amazonas-DCC/UA, visam dar aos alunos
provenientes de diversos cursos um primeiro contato com o computador.

Este texto pretende servir de auxílio para atingir o objetivo de mostrar conceitos básicos
sobre computadores.

4
NOÇÕES DE COMPUTADORES

1.1 EVOLUÇÃO HISTÓRICA DA COMPUTAÇÃO

A Tabela 1 mostra um histórico sucinto da maneira como o Homem calcula e dos meios
que utilizou para facilitar este processo.

Dedos (origem do sistema decimal)


Seixos
Ábaco
1617 John Napier Ossos de Napier. Régua de cálculo.
1633 Wilhelm Schickard Primeira calculadora mecânica
1642 Blaise Pascal Calculadora mecânica de rodas dentadas de 10 posições
1694 Gottfried Wilhelm Máquina de multiplicar totalmente mecânica
von Leibnitz
1728 Basile Bouchon Tear com desenhos programados por folha giratória de
papel perfurado
1859 Charles Babbage Máquina para computar tabelas matemáticas
1875 Frank Baldwin Máquina para somar, subtrair, multiplicar e dividir a
partir de móveis acionados no painel.
1887 Dorr Feld Computômetro – máquina dirigida por chaves
1890 W. Burroughs Primeira máquina de somar e imprimir
1890 Herman Holerith Perfuradora de cartões – registrava e classificava números
através de furos em cartões; a leitura era feita através de
pinos que se encaixavam em localizações específicas.
Criada para utilização no censo americano. Empresa
origem da IBM (1924)
1920 Caixas registradoras elétricas e máquinas com teclado
1946 ENIAC (Eletronic Integrator and Calculator), primeiro
computador digital eletrônico: 18000 válvulas, 1500 relés,
resistores, capacitores, indutores, 200 kW de potência.
Memória para até 20 números de 10 dígitos cada um.
Programação através de fios e pinos (painel de
telefonista). Apenas dados armazenados na memória.
1948 EDVAC (Electronic Discrete Variable Automatic
Computer), baseado na proposta de J. Von Neumann de
uma máquina que armazenava na memória dados e
instruções.
1949 UNIVAC, primeiro computador em escala comercial,
utilizado com sucesso no censo dos EUA em 1951.

Tabela 1: Breve Histórico da Computação

5
1.2 GERAÇÕES DE COMPUTADORES

É comum referenciar-se aos computadores com relação ao seu grau de evolução


tecnológica em função de gerações. A Tabela 2 dá um resumo das gerações de
computadores.

Década Geração Características


1940 1a Circuitos eletromecânicos e válvulas (ENIAC, EDVAC, UNIVAC).
1950 2a Transistores (Bell Telephone Laboratories, 1948), dispositivos
menores com menor consumo de potência, mais robustos e confiáveis.
1960 3a Circuitos integrados – integração de vários transistores em uma única
embalagem (chip) com aproximadamente as mesmas dimensões de
um transistor.
1970 4a Milhares de transistores em uma única pastilha VLSI (Very Large
Scale Integration).

Tabela 2: Gerações de Computadores

A evolução tecnológica gera computadores cada vez mais baratos, potentes e rápidos. Com
isso cada vez mais coisas podem ser realizadas pelos computadores.

1.3 FORMAS EM QUE SE APRESENTAM OS COMPUTADORES

Os computadores apresentam-se em diversas formas e estão em evolução contínua.


A Tabela 3 dá um breve resumo destas formas.

Forma Características
Supercomputador Mais potentes, em geral utilizam multiprocessadores. Usado para
simulações científicas complexas (Ex.: previsão de clima). Fabricante:
IBM, Cray.
Mainframe Grandes de computadores com alta capacidade de processamento. Em
geral são usados para aplicações comerciais e industriais. Fabricante:
IBM.
Minicomputador Intermediário entre mainframes e microcomputadores. Fabricantes:
IBM, DEC, HP.
Estação de Trabalho Mais poderosos que os microcomputadores. Rodam o sistema
(Workstation) operacional Unix ou uma variação. Em geral usam a tecnologia RISC
(Reduced Instruction Set Computer). Fabricantes: Sun,
SiliconGraphics.
Microcomputador Pequenos computadores com múltiplas finalidades. Fabricantes: IBM,
Apple.

Tabela 3: Formas dos Computadores

6
1.4 ESTRUTURA BÁSICA DE UM COMPUTADOR

O computador é uma máquina programável capaz de processar informações com grande


rapidez. A Figura 1 mostra a estrutura básica de um computador: unidades de entrada,
unidade central de processamento, memória e unidades de saída.

As unidades de entrada permitem ao computador acessar informações do mundo externo.


As informações são traduzidas em códigos que possam ser entendidos pela Unidade Central
de Processamento. Exemplos de dispositivos de entrada são: teclado, mouse, tela
touchscreen, leitora de cartão magnético, joystick, caneta ótica, scanner de imagens,
scanner de código de barras, driver de disquete, driver de CD-ROM (Compact Data - Read
Only Memory), disco rígido (hard disk ou HD), leitora de fita magnética, leitora de cartão
perfurado, câmera fotográfica digital, câmera de video, sensores, etc.

As unidades de saída convertem impulsos elétricos, permitindo a saída de informações


para meios externos e possibilitando sua visualização e armazenamento por diferentes
periféricos ou, ainda, a utilização de dados por outro computador. Exemplos de
dispositivos de saída são: impressora, plotadora, monitor ou vídeo, driver de disquete (31/2
e 51/4 pol), disco rígido (hard disk ou HD), gravadora de fita magnética, emissor de som,
controladores, etc.

A Unidade Central de Processamento (UCP) é formada pela Unidade de Controle e


Unidade Lógico-Aritmética (ULA). A Unidade de Controle gerencia todos os recursos do
computador e contém as instruções da UCP para executar comandos. A Unidade Lógico-
Aritmética realiza operações aritméticas (adição, subtração, multiplicação, divisão) e
operações lógicas (conjunção, disjunção e negação). A Unidade Central de Processamento
também é conhecida pela sigla inglesa CPU (Central Processor Unit).

A memória principal do computador é conhecida por RAM (Random Access Memory). Na


memória principal estão as instruções que estão sendo executadas e os dados necessários a
sua execução. A memória principal também chamada de memória de trabalho ou memória
temporária, é uma memória de leitura e escrita (read/write). Suas características são: rápido
acesso (da ordem de nanosegundos em computadores mais modernos), acesso aleatório
(para acessar uma posição de memória o computador vai diretamente a esta posição
através do endereço) e volatilidade (em caso de falta de energia elétrica ou desligamento do
computador há perda de informações).

7
Memória

Unidade Unidade Unidade


de de
Unidade de
Entrada Controle
Lógica e Saída
Aritméti
ca
Unidade Central de
Processamento
Figura 1: Estrutura básica de um computador

O computador possui também uma memória chamada ROM (Read Only Memory) onde são
guardadas informações para inicializar o computador, verificando a memória principal (seu
tamanho e integridade) e os periféricos e, também, ativando o sistema operacional. Esta
memória é não volátil (isto é, não se perde quando o computador é desligado ou há uma
variação de tensão), e em geral é gravada pelo fabricante e com pequena capacidade de
armazenamento. Depois de gravada a ROM não pode ser mais alterada pelo usuário.

A memória secundária ou memória auxiliar é usada para armazenar grandes quantidades de


informações. Um exemplo comum de memória secundária é o disco rígido.

O hardware de um computador consiste dos componentes físicos, tais como a UCP


(Unidade Central de Processamento), memória e os dispositivos de entrada/saída
(comumente chamados de periféricos) que formam o sistema.
O software refere-se aos programas usados para controlar a operação do hardware para
solucionar problemas.

A unidade básica de informação é o bit (binary digit). O bit pode ter valor 0 (zero
-desligado) ou 1 (um - ligado). Esta representação não é usual para seres humanos por
envolver grandes seqüências de dígitos binários para representar números decimais.
Entretanto esta representação pode ser usada convenientemente por computadores usando
circuitos eletrônicos pois os dois valores básicos (0 e 1) são representados de modo
confiável e eficiente, pela presença ou ausência de correntes elétricas, cargas elétricas ou
campos magnéticos nos circuitos.

Chama-se byte um conjunto de 8 bits. Bytes são usados para representar informações tais
como caracter, número e outros tipos de dados. É comum se referir aos seus múltiplos:
kilobyte, megabyte, gigabyte e terabyte.

1 Kilobyte = 210 bytes = 1024 bytes


1 Megabyte = 1024 kilobytes = 1048576 bytes
1 Gigabyte = 1024 Megabytes = 1048576 kilobytes = 1073741824 bytes
1 Terabyte = 1024 Gigabytes

8
O ASCII (American Standard Code for Information Interchange), Figura 2, é o código
normalmente usado para representar caracteres em computadores. Ele é constituído de 95
caracteres de impressão (gráficos) e 33 caracteres de controle, que são usados
principalmente em transmissão de dados e para controle de equipamentos de impressão.
Por exemplo os caracteres a maiúsculo e minúsculo são representados em ASCII pelas
seqüência

Binário Decimal
A 01000001 65
a 01100001 97

A memória do computador está subdividida em palavras, que é a menor quantidade de


informação endereçável. Uma palavra de computador é um conjunto de bytes. O tamanho
da palavra do computador é uma escolha de arquitetura, variando de máquina para
máquina. Por exemplo no microprocessador Pentium a palavra é de 32 bits (ou 4 bytes).

BIT
BI menos
0 1 2 3 4 5 6 7
T
sig OOOO OOO1 OO1O OO11 O1OO O1O1 O11O O111
nif
0 OOOO NUL DLE SP 0 @ P ` p
1 OOO1 SOH DC1 ! 1 A Q a q
2 OO1O STX DC2 " 2 B R b r
3 OO11 ETX DC3 # 3 C S c s
4 O1OO EOT DC4 $ 4 D T d t
5 O1O1 ENQ NAK % 5 E U e u
6 O11O ACK SYN & 6 F V f v
7 O111 BEL ETB ' 7 G W g w
8 1OOO BS CAN ( 8 H X h x
9 1OO1 HT EM ) 9 I Y i y
A 1O1O LF SUB * : J Z j z
B 1O11 VT ESC + ; K [ k {
C 11OO FF FS , < L \ l |
D 11O1 CR GS - = M ] m }
E 111O SOH RS . > N ^ n ~
F 1111 SI US / ? O _ o DEL

Figura 2: Código Padrão Americano para Intercâmbio de Informações


(ASCII)

9
1.5 SISTEMA OPERACIONAL
O sistema operacional (SO) gerencia os recursos (hardware e software) do computador,
disponibilizando-os de maneira amigável ao usuário. O SO tem como objetivo colocar uma
camada de software sobre o hardware para gerenciar todas as partes do sistema e apresentá-
las ao usuário como uma interface, uma abstração, uma máquina mais fácil de entender e
programar.

Ex.: DOS, UNIX, Linux, Windows95, VM, VSE, etc.

As funções do sistema operacional são: gerenciamento de memória, gerenciamento de


processos, gerenciamento de E/S (entrada/saida) e gerenciamento de arquivos.

1.6 PROGRAMAS DE COMPUTADORES E TRADUTORES


Um programa de computador é uma coleção de instruções que, quando executadas pela
CPU de um computador, cumpre uma tarefa ou função específica.

Nos primeiros computadores a programação era feita diretamente por iniciação direta de
comandos ligando e desligando interruptores e por meio de ligação direta de fios em
circuitos. Este processo oneroso e lento é atualmente substituido pela introdução dos
tradutores.

Os computadores trabalham internamente com instruções em linguagem de máquina. Estas


linguagens são chamadas de baixo nível por serem entendidas facilmente apenas pelas
máquinas. Tipicamente linguagens de máquinas são compostas de 50 a 300 instruções que
fazem basicamente mover dados pela máquina e realizam comparações e operações
aritméticas.
Ex.: ADD A, B

Os tradutores permitem que um programa escrito em uma linguagem de alto nível (Pascal,
C, Fortran, etc) seja entendido e executado pelo computador. As linguagens são
consideradas de alto nível quando apresentam algumas fortes semelhanças com a maneira
pela qual o Homem se expressa. Os tradutores dividem-se em interpretadores e
compiladores.

No programa interpretador uma instrução é decodificada e executada, através de um ciclo


repetitivo. A desvantagem é que isso leva um tempo de execução maior.
No programa compilador o programa fonte é compilado através de diversas fases:
Faz-se uma análise léxica do programa-fonte; depois uma análise sintática; gera-se um
código intermediário; procura-se otimizar o código; finalmente é gerado o código objeto,
que é chamado programa-objeto. O programa objeto está pronto para ser executado quando
for carregado na memória principal e ativado pelo sistema operacional.

10
1.7 CONVERSÃO DE NÚMEROS DECIMAIS EM BINÁRIOS E VICE-
VERSA

O computador é uma máquina binária pois internamente trabalha com números na base 2
(base binária), reconhecendo apenas os dígitos 0 e 1, conhecidos como bits. O Homem
comumente utiliza o sistema de numeração decimal, ou seja números formados por 10
dígitos que são o 0, 1, 2, 3, 4, 5, 6, 7, 8 e 9.
Nas seções subseqüentes aprenderemos a transformar números decimais em binários e vice-
versa.

CONVERSÃO DE NÚMEROS INTEIROS DECIMAIS EM NÚMEROS BINÁRIOS

O método utilizado é conhecido como “método das divisões sucessivas”. Tomaremos como
exemplo o número decimal 12 e encontraremos seu equivalente em binário.
Passos:
1.Realizam-se divisões inteiras sucessivas do número decimal original pela base 2 até que o
quociente seja menor do que o divisor 2.

12 |_2_
0 6 |_2_
0 3 |_2_
1 1 1 < 2 Verdadeiro

2.Ao encontrar a condição de parada, o número binário equivalente é dado tomando-se o


último quociente e os demais restos na ordem inversa em que foram calculados. Logo o
número binário equivalente é

1100

Dizemos então que: (12)10 = (1100)2

1.5.2. CONVERSÃO DE NÚMEROS INTEIROS BINÁRIOS EM NÚMEROS


DECIMAIS

Tomemos o caso do número inteiro binário 1100. Podemos colocá-lo na forma:


(1100)2 = 1 X 23 + 1 X 22 + 0 X 21 + 0 X 20

= 1X8 +1x 4 +0X2 + 0X1

= 8+4

= (12)10
1.5.3. CONVERSÃO DE NÚMEROS FRACIONÁRIOS DECIMAIS EM NÚMEROS
BINÁRIOS

O método utilizado é conhecido como “método das multiplicações sucessivas”. Tomaremos


como exemplo o número decimal 0.625 e encontraremos seu equivalente em binário.

11
Passos:
1.Realizam-se multiplicações sucessivas do número fracionário decimal original pela base
2 até que o quociente seja igual a 1.

0.625 X 2 = 1.250

2.Ao encontrar um resultado maior que 1, toma-se no próximo cálculo a parte fracionária.
Caso contrário prossiga.

0.250 X2 = 0.500
0.500 X2 = 1.000 1.000 = 1 Verdadeiro

3. A condição de parada é encontrarmos um produto igual a 1. Os dígitos na ordem em que


foram gerados correspondem à parte fracionária do número binário convertido. Logo o
número binário equivalente é

0.101

Dizemos então que: (0.625)10 = (0.101)2

1.5.4. CONVERSÃO DE NÚMEROS FRACIONÁRIOS BINÁRIOS EM NÚMEROS


DECIMAIS
Tomemos o caso do número fracionário binário 0.101, podemos colocá-lo na forma:
(0.101)2 = 1 X 2-1 + 0 X 2-2 + 1 X 2-3
= 1 + 0 + 1
21 22 23
= 0.5 + 0.125
= (0.625)10

12
2. ALGORITMOS

O conceito de algoritmo é central tanto na programação de computadores quanto na própria


ciência da computação. Quando se constrói algoritmos, geralmente este será executado por
uma outra pessoa ou por uma máquina. Daí a necessidade de que estes sejam expressos da
forma mais clara e objetiva possível a quem vai executá-lo. Niklaus Wirth, o inventor da
linguagem de programação Pascal apresenta a programação estruturada como “a arte ou
técnica de construir e formular algoritmos de forma sistemática”. A programação pode ser
vista como formulações concretas de algoritmos abstratos, em outras palavras, existe uma
máquina que pode executar um programa enquanto que algoritmos, no sentido mais amplo
da palavra, não.

2.1. CONSTRUÇÃO DE ALGORITMOS

Antes de ser apresentado a definição de algoritmos, é interessante que se resolva alguns


exercícios, apresentação de conceitos e a partir destes pode-se construir uma definição.

Exercício 1: A troca de conteúdos entre dois recipientes

Supor a existência de dois recipientes tendo cada um líquido. Se os dois líquidos forem
juntados uma explosão ocorrerá. Como transferir o conteúdo de um recipiente para o outro
e vice-versa sem que ocorra uma explosão?

Solução:

As restrições deste exercício só apontam para o caso da explosão, caso os dois líquidos
sejam juntados, e não fala nada sobre a forma de transferência entre os dois líquidos. Para
fazermos esta transferência precisaremos de um terceiro recipiente. Chamaremos cada
recipiente de A, B e C. A solução pode ser expressa da seguinte forma:

1) Colocar o conteúdo do recipiente A no recipiente C.


2) Colocar o conteúdo do recipiente B no recipiente A.
3) Colocar o conteúdo do recipiente C no recipiente B.

Repare que a solução foi expressa em termos de uma seqüência de ações. A partir da ação
inicial, cada ação sempre segue uma outra ação, caracterizando uma ordem de execução e,
se esta ordem não for mantida, poderemos não chegar ao resultado esperado.

A definição de uma ação, neste contexto, pode ser a de um acontecimento que ocorre num
período de tempo finito e que produz algum efeito. Note que, nesta definição, só é
interessante as ações que terminam em um tempo finito, as outras não interessam. Cada
ação produz um efeito. Quando se tem uma seqüência de ações surge o conceito de efeito
intermediário, que seria o efeito produzido por cada ação, e efeito total (ou acumulado),
que seria a junção de todos os efeitos intermediários.

Exercício 2: O problema do homem e suas três cargas

13
Um homem precisa atravessar um rio com um barco que possui capacidade de carregar
apenas ele mesmo e mais uma de suas três cargas, que são: uma onça, uma paca e maço de
alface. O que o homem deve fazer para conseguir atravessar o rio com suas três cargas e
sem perdê-las?

Solução:

Mais uma vez, antes de começarmos a escrita do algoritmo é interessante analisarmos as


restrições do exercício. O homem não deve deixar em uma mesma margem do rio: (a) a
onça e a paca (senão a onça devorará a paca) e (b) a paca e o maço de alface (senão a paca
devorará a alface). O resto tudo é possível. É importante notar que nada foi falado sobre
quantas viagens o homem poderia fazer.

Tendo em vista estas restrições já é possível buscar a solução. Inicialmente simplesmente


não podemos levar nem a onça e nem a alface, senão uma restrição seria violada. E daí por
diante continuaremos sempre tentado nunca violar as restrições.

A solução pode ser através de um gráfico e/ou descrição textual. Vamos apresentar em sala
de aula as duas formas.

É importante notar que esta solução tem uma segunda alternativa e que também chega ao
resultado final. O desenvolvimento desta alternativa fica como exercício.

Mais uma vez, este algoritmo foi expresso como uma seqüência de ações e, antes que
qualquer linha tivesse sido escrita, foi necessário fazer uma análise para identificar as
restrições do exercício, ou seja, o que pode e o que não pode ser feito.

Exercício 3: O problema da torre de hanoi

A torre de hanoi consiste de três hastes (a, b e c), uma das quais serve de suporte para três
discos de tamanhos diferentes (1, 2 e 3), os menores sobre os maiores. Pode-se mover um
disco de cada vez para qualquer haste, contanto que nunca seja colocado um disco maior
sobre um disco menor. O objetivo é transferir os três discos para a outra haste.

Solução:

A única restrição é a de que um disco maior não pode ficar sobre um disco maior. A
solução será dada somente de forma gráfica. A descrição textual ficará como exercício.

Exercício 4: Dona de casa descascando batatas

Como um observador relataria uma dona de casa descascando batatas para o jantar.

Solução:

Dependendo do observador, o relato poderia ser de várias formas possíveis. Por exemplo:

14
1) Traz a cesta com batatas do porão
2) Traz a panela do armário
3) Descasca as batatas
4) Devolve a cesta ao porão

Suponhamos que este seja o relato em um certo dia. No dia seguinte a dona de casa
novamante descasca batatas para o jantar e o observador descreve um relato que é idêntico
ao primeiro. Podemos dizer que este relato descreve o mesmo evento? Evidentemente não,
pois trata-se de eventos distintos, ocorridos em dias diferentes, com batatas diferentes e até
a mesma dona de casa não é a mesma (está um dia mais velha, por exemplo). Entretanto,
estes dois eventos apresentam o mesmo padrão de comportamento. Considerando um
outro exemplo: nas diferentes execuções de n2, para diferentes valores de n, podemos
reconhecer o mesmo padrão de comportamento e o nome que damos a todos estes eventos é
“elevar um número ao quadrado”.

2.2. DEFINIÇÃO DE ALGORITMOS

Após estes exercícios de construção de algoritmos já estamos em condições de criarmos


uma definição para algoritmos. Existem algumas definições para algoritmos. Pode-se dizer
que algoritmo é uma seqüência de ações para chegar a um objetivo bem definido. Ou que,
algoritmo é a descrição de um padrão de comportamento, expresso em termos de um
repertório bem definido e finito de ações primitivas, das quais damos por certo que elas
podem ser executadas. Uma terceira definição diz que, um algoritmo é a descrição de um
conjunto de comandos que, obedecidos, resultam numa sucessão finita de ações.

Das definições acima vemos que as ações têm um caráter imperativo e por isso, muitas
vezes, são chamadas de comandos.

Para introduzirmos novos conceitos vamos voltar ao exercício da dona de casa descascando
batatas. Algumas vezes as donas de casa colocam um avental. Vamos supor que a dona de
casa usa um critério racional para saber se deve ou não usar o avental, e que este critério é
se ela está usando ou não uma roupa branca. Neste caso podemos escrever um algoritmo
que cubra estes dois eventos. Um outro detalhe sobre este algoritmo está no número de
batatas a serem descascadas. Ora, em um dia podem ser descascadas cinco batatas, no dia
seguinte sete batatas, no terceiro dia quatro batatas e assim sucessivamente, sendo que a
cada dia a quantidade de batatas pode variar.

Poderemos suprir estas duas situações se usarmos duas novas estruturas: a estrutura de
seleção e a de repetição. O novo algoritmo pode ser modificado para:

1) Trazer o cesto com batatas do porão


2) Trazer a panela do armário
3) Se a roupa é clara então colocar o avental
4) enquanto número de batatas é insuficiente faça
4.1) descasque uma batata
5) devolver a cesta ao porão

15
A quarta ação poderia ser feita de uma outra forma, como em:
4) repetir até que número de batatas seja suficiente
4.1) descasque uma batata

Acabamos de apresentar as três estruturas que compõem os algoritmos: seqüência, seleção


e repetição. Todo e qualquer algoritmo é sempre desenvolvido através do uso de apenas
estas três estruturas. Quando descrevemos algoritmos utilizando estas estruturas de
controle os mesmos tornam-se mais claros e elegantes, além de serem mais gerais do que a
simples descrição de ações.

2.3. REFINAMENTOS SUCESSIVOS

Na vida quotidiana, os algoritmos são encontrados freqüentemente: instruções para se


utilizar um aparelho eletrodoméstico, uma receita para o preparo de algum prato, o guia de
preenchimento da declaração do imposto de renda, a regra para a determinação dos
máximos e mínimos de funções por derivadas sucessivas, dentre várias outras.

Um algoritmo é considerado completo se seus comandos forem do entendimento de seu


destinatário. Um comando que não for do entendimento do destinatário tem que ser
desdobrado em novos comandos, que constituirão um refinamento do comando original.

Considere como exemplo o algoritmo para calcular a multiplicação de matrizes.

Algoritmo: Multiplicação de Matrizes.


Ler as matrizes A e B
Calcular C = A x B
Mostrar as matrizes
Fim-algortimo

Se algum destes comandos não for do entendimento do destinatário, este comando precisa
ser refinado.

2.4. ALGORITMOS ESTRUTURADOS

A flexibilidade da utilização de computadores exige que, para cada problema a ser levado
ao computador, sejam planejadas as operações correspondentes. Este planejamento deve ser
feito antes de se utilizar o computador. Desta forma, antes de se usar um computador para
resolver problemas é necessário que se construa antes um algoritmo. Este algoritmo tem
que ser, de alguma forma, transmitido ao computador e armazenado em sua memória, para
depois ser posto em execução e conduzir o computador para a solução do problema
proposto. O algoritmo deve, portanto, prever antecipadamente todas as situações que
possam vir a ocorrer quando for posto em execução.

Se um problema for muito simples e pequeno, não há qualquer dificuldade em desenvolver


um algoritmo. Entretanto, com o avanço da tecnologia de hardware, os computadores de
hoje em dia têm grande poder de processamento e memória. Com esta evolução, os
problemas que estão sendo levados aos computadores são maiores e mais complexos. Por

16
esta razão, surgiram técnicas que permitem sistematizar e ajudar o desenvolvimento de
algoritmos para a resolução de grandes e complexos problemas. Estas técnicas são
chamadas de desenvolvimento estruturado de algoritmos.

Os objetivos destas técnicas são:

a. facilitar o desenvolvimento de algoritmos;


b. facilitar o seu entendimento por humanos;
c. antecipar a comprovação de sua correção;
d. facilitar a sua manutenção (corretiva e/ou evolutiva);
e. permitir que o seu desenvolvimento possa ser empreendido simultaneamente por uma
equipe de pessoas.

Para atingir estes objetivos o desenvolvimento estruturado preconiza que:

(1) Os algoritmos sejam desenvolvidos por refinamentos sucessivos;


(2) Os sucessivos refinamentos são módulos, que possuem poucas funções e são o mais
independente possível dos outros módulos;
(3) Nos módulos devem ser usados um número limitado de comandos e de estruturas de
controle.

O refinamento sucessivo permite que se aborde o problema de forma mais segura e


objetiva. A integração dos módulos é mais perfeita porque o módulo é atacado quando já se
estudou claramente o ambiente onde este deve atuar. A divisão por módulos permite
contornar a complexidade e, ainda, permite que sejam desenvolvidos de forma
independente, inclusive por pessoas diferentes. O uso limitado de diferentes estruturas e
comandos, apesar de parecer muito restritiva, são úteis para manter a simplicidade e
clareza, sendo estas inestimáveis quando se está fazendo alguma manutenção.

Para se obter uma melhor clareza dos algoritmos, costuma-se desenvolvê-los e ilustrá-los
com o auxílio de diagramas de blocos: algumas figuras geométricas e dizeres são usados
para representar as várias operações do computador, sendo ligados por setas para indicar a
seqüência de execução. Existem dois principais tipos de estruturas de blocos: o fluxograma
e o diagrama de Chapin. O grande problema de utilizarmos estes diagramas é que quando o
algoritmo é grande há uma confusão no entendimento dos diagramas.

2.5. O PORTUGOL

A liberdade de expressão é essencial para o desenvolvimento da criatividade em


praticamente todas as atividades humanas. Para tanto, o uso da linguagem natural é o que
se tem de melhor para expressar os nossos pensamentos. Entretanto, as linguagens naturais
vêm com a problemática das ambigüidades e, algumas vezes, de falta de concisão. Uma
linguagem formal evita estes problemas, mas limita o poder de expressão. Estamos,
portanto, diante de um impasse. A solução é a escolha de uma linguagem que ofereça
estruturas adequadas, bem projetadas, com efeitos bem definidos e que, além disso, não
restrinjam a criatividade do programador.

17
Será utilizada a pseudo-linguagem PORTUGOL (simbiose do PORTUguês com alGOl e
pascaL). A idéia é permitir que com um conjunto básico de primitivas seja possível ao
projetista pensar no problema e não na máquina que vai executar o algoritmo e, por outro
lado, não fique tão distante desta máquina.

Em toda a linguagem, as frases construídas envolvem dois aspectos: a sintaxe e a


semântica. A sintaxe tem a ver com a forma e a semântica com o conteúdo. Considerando o
português como linguagem, tomemos uma frase sintaticamente correta (tem verbo, sujeito
e objeto, e as palavras estão escritas corretamente):

“Aqui vendem-se frangos abatidos”

A semântica correta desta frase é a de que naquele estabelecimento existe uma venda de
frangos já mortos, e não frangos deprimidos ou anêmicos.

2.6. IDENTIFICADORES

Os identificadores são nomes dados à variáveis e constantes. Estes nomes devem ser o mais
significativo possível, isto é, devem refletir o que está sendo armazenado naquela variável
ou constante. Um identificador é formado por um ou mais caracteres, sendo que o primeiro
caractere deve, obrigatoriamente, ser uma letra. O restante podem ser letras ou dígitos (não
são permitidos símbolos especiais, exceto o underscore “_”).

2.7. CONSTANTES

Uma constante é um determinado valor fixo que não se modifica ao longo do tempo,
durante a execução de um programa. Com o propósito de deixar mais claro o algoritmo,
algumas vezes são dados nomes (ou identificadores) para as constantes. Esta pode ser um
número, um valor lógico ou uma seqüência de caracteres (constante literal).

A constante numérica é expressa na notação decimal, com ou sem parte fracionária,


podendo ser positiva ou negativa. A constante lógica só assume dois valores possíveis:
verdadeiro ou falso. As constantes literais englobam qualquer seqüência de caracteres
(letras, dígitos ou símbolos especiais). Estas constantes são representadas entre aspas para
que não seja confundida com outro item qualquer.

2.8. VARIÁVEIS

Na matemática, sabemos que uma variável é a representação simbólica dos elementos de


um certo conjunto. Nos algoritmos uma variável corresponde a uma posição de memória,
cujo conteúdo pode variar ao longo do tempo durante a execução de um programa. As
variáveis só podem assumir um valor a cada instante. Toda variável é identificada por um
identificador.

18
As variáveis só podem armazenar valores de um mesmo tipo, sendo estes também
numéricos, lógicos ou literais. Para indicar o tipo das variáveis é usada a declaração de
variáveis e constantes. Uma vez declarada uma variável, qualquer referência a seu
identificador implica na referência ao conteúdo do local de memória representado pelo
mesmo.

As declarações de variáveis podem ter a seguinte forma:

declare lista-de-identificadores nome-do-tipo

2.9. COMENTÁRIOS

Os comentários têm a finalidade de deixar mais claro os algoritmos para as pessoas que o
estarão lendo. Ele é um texto, ou simplesmente uma frase que aparece sempre delimitado
por chaves. Os comentários podem ser postos em qualquer lugar onde se façam
necessários.

2.10. EXPRESSÕES ARITMÉTICAS

Denomina-se expressão aritmética aquela cujos operadores são aritméticos e cujos


operandos são constantes e/ou variáveis do tipo numérico. O conjunto de operações básicas
adotado é o que se conhece da matemática, que são: adição, subtração, multiplicação,
divisão, potenciação e radiciação. Nas expressões aritméticas, tal como na matemática, as
operações guardam entre si uma relação de prioridade. Primeiro a potenciação e radiciação,
depois a multiplicação e divisão e por último a adição e subtração. Para se alterar essa
ordem de prioridade pode-se usar os parênteses.

Além das operações básicas, pode-se utilizar algumas funções muito comuns na
matemática. Algumas funções podem ser: LOG(X), logaritmo na base 10 de X; LN(X),
logaritmo neperiano de X; EXP(X), o número e (base do logaritmo neperiano) elevado a X;
ABS(X), o valor absoluto de X; TRUNCA(X), a parte inteira do número fracionário X;
ARREDONDA(X), transforma por arredondamento um número fracionário em um número
inteiro; SINAL(X), devolve o valor -1, +1 ou 0, caso X seja negativo, positivo ou igual a
zero, respectivamente; QUOCIENTE(X, Y), devolve o quociente inteiro da divisão de X
por Y; RESTO(X, Y), devolve o resto da divisão inteira de X por Y.

2.11. EXPRESSÕES LÓGICAS

É comum nos algoritmos surgirem situações em que a execução de uma ação (ou seqüência
de ações) está sujeita a uma certa condição. Esta condição é representada através de uma
expressão lógica.

Uma expressão relacional é uma comparação realizada entre dois valores de mesmo tipo
básico. Os operadores relacionais, que são usados na expressão relacional, já são
conhecidos da matemática e são:

= (igual) ≠ (diferente) > (maior do que)

19
< (menor do que) ≥ (maior ou igual) ≤ (menor ou igual)

O resultado obtido de uma relação é sempre um valor lógico.

Os operadores lógicos utilizados nas expressões relacionais são: E (para a conjunção), OU


(para a disjunção) e NÃO (para a negação).

2.12. EXPRESSÕES LITERAIS

Uma expressão literal é aquela formada por operadores literais e operandos que são
constantes e/ou variáveis do tipo literal. As operações sobre valores literais são bastante
diversificadas, e entre elas incluem:
(a) concatenação de duas literais
(b) comprimento da literal
(c ) os n primeiros caracteres de uma literal
(d) os n últimos caracteres de uma literal
(e) a cópia de uma parte da literal a partir da posição i até a posição j.

2.13. COMANDO DE ATRIBUIÇÃO

Este comando permite que se forneça um valor a uma variável, onde a natureza deste valor
tem que ser compatível com o tipo da variável. O comando de atribuição tem a forma a
seguir:

identificador ← expressão

A expressão deve ser primeiramente avaliada e depois atribuída à variável. As constantes e


variáveis são também formas de expressão mais simples.

2.14. COMANDOS DE ENTRADA E SAÍDA

Sabemos que as unidades de entrada e saída são dispositivos que possibilitam a


comunicação entre o usuário e o computador. Por exemplo, através do teclado, o usuário
consegue dar entrada ao programa e os dados na memória do computador. Por outro lado, o
computador pode emitir os resultados e outras mensagens para o usuário através de uma
impressora ou do monitor de vídeo. Os comandos de entrada e saída têm a finalidade de
fazer esta interação com o usuário.

O comando de entrada é feito de acordo com a seguinte forma geral:

Leia <lista de identificadores>

Ex.: Leia codigo_aluno, nota

20
O comando de saída tem a forma geral:

Escreva <lista de identificadores> e/ou <constantes>

Ex.: Escreva “Código do Aluno: “, codigo_aluno, “Nota: “, nota

2.15. ESTRUTURA SEQÜENCIAL

Em um algoritmo aparecem em primeiro lugar as declarações seguidas por comandos que,


se não houver indicação em contrário, deverão ser executados em uma seqüência. Os
algoritmos são iniciados com a palavra Algoritmo e terminados com fim-algoritmo.

Exemplo:

Algoritmo
declare A, B, C numérico
leia A, B, C
C ← (A + B) x C
escreva A, B, C
fim-algoritmo

Neste exemplo, após serem definidos os tipos das variáveis A, B e C, os valores de A e B


são lidos, o valor de C é calculado e os valores contidos nas variáveis A, B e C serão
escritos.

2.16. ESTRUTURA CONDICIONAL

A estrutura condicional permite a escolha do grupo de ações e estruturas a serem


executados quando determinadas condições, representadas por operações lógicas, são ou
não satisfeitas. Esta estrutura é delimitada pelo comando se e pela expressão fim-se. Esta
estrutura pode se apresentar de duas formas: (a) estrutura condicional simples e; (b)
estrutura condicional composta.

A estrutura condicional simples tem a seguinte forma:

se <condição>
então <seqüência de comandos>
fim-se

A estrutura condicional composta tem a seguinte forma:

se <condição>
então <seqüência A de comandos>
senão <seqüência B de comandos>
fim-se

21
2.17. ESTRUTURA DE REPETIÇÃO

A estrutura de repetição permite que uma seqüência de comandos seja executada


repetidamente até que uma determinada condição de interrupção seja satisfeita. A estrutura
será delimitada pelo comando repita e pela expressão fim-repita. A interrupção é feita
através do comando interrompa. Esta estrutura pode se dar de três formas: interrupção no
início, interrupção no interior e interrupção no fim.

A interrupção no início tem a seguinte forma:

repita
se condição
então interrompa
fim-se
<seqüencia de comandos>
fim-repita

A interrupção no interior tem a seguinte a forma:

repita
<seqüencia A de comandos>
se condição
então interrompa
fim-se
<seqüencia B de comandos>
fim-repita

A interrupção no fim tem a seguinte a forma:

repita
<seqüencia A de comandos>
se condição
então interrompa
fim-se
fim-repita

22
3. CODIFICAÇÃO PASCAL

A linguagem de programação Pascal foi criada na década de 70 por Niklaus Wirth e é de


propósito geral, baseada em conceitos de programação estruturada. Nas versões mais atuais
o Pascal suporta também o paradigma de Orientação a Objetos.
Neste texto daremos uma breve introdução das regras de sintaxe dos principais comandos e
exemplificamos traduzindo algoritmos do Portugol para o Turbo Pascal 7.0.

3.1 ESTRUTURA DE PROGRAMAS PASCAL

Um programa Pascal consiste em um título e um corpo. O comando Program define o


título:

PROGRAM PesoIdeal;
Program Somar;
PROGRAM Soma_Dois_Números;

O corpo do programa contém a seção de especificação de dados e a seção de operação. A


seção de especificação de dados deve vir primeiro e define todos os dados a serem usados:
ela começa com a palavra reservada Var. A seção de operações contém comandos que
lêem dados, executam ações e mostram resultados; ela começa com Begin e termina com
End. O programa termina com um ponto final.
Ex.:
Program SomaDoisNumeros;
var A, B, Soma : real;
begin
read(A,B);
Soma := A + B;
write(Soma);
end.

3.1.1 IDENTIFICADORES
Os identificadores são nomes dados às variáveis e constantes. Estes nomes devem ser o
mais significativo possível,
Os identificadores são formados de letras, digitos e o caracter underscore (_). Não há
distinção entre caracteres maiúsculos e minúsculos. O primeiro caracter de um
identificador deve ser ou uma letra ou caracter underscore; o caracter branco não dever ser
usado em um identificador. O identificador pode ter qualquer tamanho contudo
limitaremos seu tamanho no máximo a 15 caracteres.

3.1.2 CONSTANTES
Os dados em Turbo Pascal podem ser classificados ou como constantes ou como variáveis.
Se os valores não variam são constantes. A palavra reservada Const é usada para definir as
constantes.
Ex:
Const

Pi = 3.14159;

23
Total_Alunos = 50;
Distancia = 152.34;
Meu_Nome = 'Francisco'
NomeArquivo = 'Arquivo01.dta';
Passou = True;

3.1.3 VARIÁVEIS
As variáveis caracterizam os dados que podem mudar durante a execução do programa. A
palavra reservada Var é usada para definir as variáveis.
Ex:
Var
MeuPeso : integer;
Altura : real;
NomeAluno : string;
Passou : boolean;

3.1.4 COMENTÁRIOS
Os comentários são precedidos de “{“e terminados pelo caracter “}”.
Exemplo:

(
Programa: Somar_Dois_Números
Objetivo: Este programa soma dois números reais
Autor: José Francisco de Magalhães Netto
Data: 98/07/28
Última Alteração: 98/07/29
}

3.1.5 EXPRESSÕES
Constantes e variáveis são usadas em expressões. Uma expresssão controla a ordem das
operações de processamento de dados. A expressão consiste de operandos, parênteses e
operadores. Constantes, variáveis e chamadas de funções podem também ser operandos.
Operadores definem as operações de processamento de operandos.

Exemplo: (X + Y - 10)
X Y operandos
+ - operadores

24
• Operadores Aritméticos

Operador Operação Tipo de Tipo do


Operando Resultado
+ adição inteiro inteiro
real real
- subtração inteiro inteiro
real real
* multiplicação inteiro inteiro
real real
/ divisão inteiro real
real real
DIV divisão inteira inteiro inteiro
MOD resto inteiro inteiro

Exemplo:
Expressão Resultado
12 + 5 17
7+8 15
12.6 - 12 0.6
-(5 + 2) -7
+(5 - 7) -2

A divisão se apresenta de três formas: /, DIV e MOD.


Para dividir dois números reais usa-se / : 125.77 / 54.92 = 2.2905 o resultado é um
número real. Para dividir números inteiros use DIV ou MOD. O operador DIV retorna o
quociente da divisão de operandos:

30 DIV 25 = 1

O operador MOD retorna o resto da divisão dos operandos:

30 MOD 25 = 5

Os resultados da divisão por MOD e DIV é um inteiro.

25
• Operadores Relacionais

Operador Operação Expressão Tipo do Resultado


= igual A=B Verdade, se A é igual a B
<> não igual A <> B Verdade, se A não é igual a B
> maior que A>B Verdade, se A é maior que B
< menor que A<B Verdade, se A é menor que B
>= maior ou igual que A >= B Verdade, se A é maior ou igual a B
<= menor ou igual que A <= B Verdade, se A é menor ou igual a B

Exemplo:
Expressão Resultado
45 = 50 Falso
45 <> 50 Verdade
60 > 60 Falso
60 >= 60 Verdade

• Operadores Lógicos (ou Booleanos)

Operador Operação Expressão A B Tipo do


Resultado
NOT Negação lógica NOT A V F
F V
AND E lógico A AND B V V V
(Conjunção) V F F
F V F
F F F
OR OU lógico A OR B V V V
(Disjunção) V F V
F V V
F F F
XOR OU Exclusivo A XOR B V V F
lógico V F V
F V V
F F F

Exemplo:
Expressão Resultado
NOT (45 = 50) Verdade
(4 < 5) AND (10 > 7) Verdade
Verdade OR Falso Verdade
Falso XOR Verdade Verdade

3.1.6 COMANDO DE ATRIBUIÇÃO


É denotada pelo símbolo := atribuindo o resultado de uma expressão a uma variável.
Ex.:

26
Ind := 5;
Preco := 10 * Quantidade;
Pais := ´Brasil´;
Aprovado := True;

3.1.7 COMANDOS DE ENTRADA E SAÍDA


Os comandos de entrada são Read e Readln que efetuam a operação de leitura.
Ex. read(Nota);
readln(Codigo, Nome, Nota, Freq);

Os comandos de saída são o Write e o Writeln.


Ex.: write(Nota);
writeln(Codigo, Nome, Nota, Freq);
writeln(`Codigo `, Codigo, `Nome do Aluno `, Nome, ` Media Final `, Media,
` Frequencia `, Freq);
writeln;

3.1.8 ESTRUTURA CONDICIONAL


Há dois comandos condicionais em Turbo Pascal: If e Case.
O comando If é o comando condicional comum. Ele possui duas formas:

If <condição> then <comando1>


else <comando2>;
e

If <condição> then <comando>;

Qualquer expressão relacional ou booleana pode ser usada como uma <condição>. No
primeiro caso se a condição é Verdade, então o <comando1> é executado senão o
<comando2> é executado.

Exemplos:
If temperatura > 37
then write(‘Gripe é possível`)
else write(‘Tudo bem!’);

O comando Case possui duas formas:

Case <seletor_de_-expressão> of
<lista de constantes 1> : <comando_1>;
<lista de constantes 2> : <comando_2>;
<lista de constantes 3> : <comando_3>;
................................................................
<lista de constantes n> : <comando_n>;

27
end;

Case <seletor_de_-expressão> of
<lista de constantes 1> : <comando_1>;
<lista de constantes 2> : <comando_2>;
<lista de constantes 3> : <comando_3>;
................................................................
<lista de constantes n> : <comando_n>;
else
<comando>
end;

O seletor pode ser qualquer tipo escalar, exceto real ou string.

Exemplos:
Case i of
1, 3, 5, 7, 9 : writeln(´Número ímpar´);
0, 2, 4, 6, 8 : writeln(´Número par´);
end;

Case i of
`I´ : writeln(´Inclusão´);
´D´ : writeln(´Deleção´);
´E´ : writeln(´Exclusão´);
else writeln(´Código Incorreto. Digite novamente a opção desejada´);
end;

3.1.9 ESTRUTURA DE REPETIÇÃO


Os comandos de repetição são Repeat, While e For.

O comando Repeat tem a seguinte estrutura:


Repeat
<comando_1>;
<comando_2>;
......................
<comando_n>;
Until <condição>;
Exemplo:

Repeat
Read(Codigo,Nome,Media_Final,Freq);
Writeln(Codigo, Nome, Media_Final, Freq)
Alunos_Lidos := Alunos_Lidos + 1;
If ((Media_Final >= 5.0) And (Freq >= 45))
then
Aprovados := Aprovados + 1
else
Reprovados := Reprovados + 1;

28
Until Alunos_Lidos = Total_Sala;

O comando While tem a seguinte estrutura:

While <condição> do
begin
<corpo do loop>;
End;

Exemplo:

While Alunos_Lidos < Total_Alunos do


begin
Read(Codigo,Nome,Media_Final,Freq);
Alunos_Lidos := Alunos_Lidos + 1;
Writeln(Codigo, Nome, Media_Final, Freq)
If ((Media_Final >= 5.0) and (Freq >= 45))
then
Aprovados := Aprovados + 1
else
Reprovados := Reprovados + 1
end;

Se a <condição> é Falsa logo no início o corpo do While não será executado nunca.

O comando For se apresenta das seguintes maneiras:

For <variável de loop> := <S1> to <S2> do <comando>;


ou
For <variável de loop> := <S1> downto <S2> do <comando>;

onde S1 e S2 definem o começo e o fim dos valores da <variável de loop>.

Exemplo: Soma dos inteiros de 1 até 10

Program SomarInteiro;
Var
I , Soma : integer;
Begin
Soma := 0;
For I := 1 to 10 do
Soma := Soma + I;
Writeln(Soma);
end.

A variável do loop não pode ser mudada no corpo do loop. Caso isto ocorra ocasionará
erro.

29
For I := 1 to 10 do
begin
Soma := I * 2;
Write(Soma);
I := I + 2; { Erro : troca ilegal da variável de loop }
end.

3.1.10 REGRAS DE SINTAXE

Há algumas regras de sintaxe que devem ser observadas ao se escrever um programa em


Turbo Pascal:

a) O ponto-e-vírgula delimita comandos e sua ausência causa erros de compilação.

X := A + B;;; { Correto }
write(X) { Errado }
X := X + 1;

b) Um ponto-e-vírgula não é usado após as palavras reservadas Unit, Uses, Label, Type,
Const e Var.

Uses; { Errado }
Var; { Errado }

b) Um ponto-e-vírgula não é usado após Begin. Um ponto-e-vírgula antes de End é


opcional.

Begin; { Errado }
Begin
Writeln(`Alo`}; { (;) antes de End é legal }
end;

d) Um ponto-e-vírgula não é usado após While, Repeat e Do. Um ponto-e-vírgula antes de


Until é opcional.

While True do; { Errado }


X := 1;
Repeat
X := X + 1;
writeln(X*X); { (;) legal }
Until X <> 11;

e) Um ponto-e-vírgula não é usado após Then e antes de Else;


If X <> 5 then Y := Y + X; { Errado }
else Y := Y + X;

30
3.1.11 EXEMPLO DE CODIFICAÇÃO DE UM ALGORITMO EM PORTUGOL NA
LINGUAGEM PASCAL

A figura abaixo na primeira coluna mostra um algoritmo em Portugol e na segunda coluna


o programa equivalente em Pascal.

Fatorial Program Fatorial;

Início Uses Crt;


Escreva (Digite um numero)
Leia(N) Var f,n,x,i :Integer;
Se N<0
Então Begin
Escreva('Nao existe fatorial de numero negativo!) ClrScr;
Senão Write('Digite um numero :');
Início Read(n);
f <- N; If n<0
Para i de (N-1) até 1 faça Then Write('Nao existe fatorial de numero
f <- f * i negativo!')
Escreva (O fatorial de N é, f) Else
Fim (Senão) begin
Fim(Fatorial) f :=n;
For i:=(n-1) downto 1 do
f :=f*i;
Write('O fatorial de ',n,' ‚ ',f);
end;{Else}
Repeat Until Keypressed;
End.

4. LISTA DE EXERCÍCIOS

31
A. Noções de Computadores

1. Discuta a afirmação abaixo:


“O computador é uma máquina inteligente que soluciona novos problemas
sem precisar de nenhuma interferência humana.”

2. Cite as gerações dos computadores e suas principais características.

3. Explique a organização básica de um computador, comentando e detalhando a


função de cada uma de suas partes e exemplificando o hardware envolvido.

4. Defina dispositivos de entrada e dispositivos de saída. Dê 5 (cinco) exemplos


para cada uma das definições.

5. Um prefeito deseja instalar um pequeno centro de computação em uma


biblioteca que deverá ser ligado via Internet a outros centros, e que possa
também gerar relatórios diários para acompanhamento. Especifique o hardware
mínimo para que isso se realize.

6. O que é RAM? O que é ROM? Aponte quais as diferenças entre elas e defina as
siglas.

7. O código ASCII (American Standard Code for Information Interchange) do


caracter g maiúsculo é o número decimal 71. Mostre a transformação em
binário gerando o byte correspondente a este caracter.

8. Defina programa-fonte e programa-objeto.

9. Uma nova geração de dispositivos de armazenamento está sendo criada. Um


desses equipamentos são as fitas DLT (Digital Linear Tape), que têm alta
capacidade e velocidade de acesso. São encontradas no mercado com várias
capacidades de memória. Um valor típico é 5 Gigabytes. Para este caso
específico, quantas páginas de texto este dispositivo pode armazenar?
* Considere uma página de 40 linhas, tendo cada linha 30 caracteres.

10. Considere um livro que possui 200 páginas, sendo que cada página possui, em
média, 50 linhas e cada linha, em média 50 caracteres. Quantos livros deste
tamanho conseguiríamos armazenar em um dispositivo que contivesse 4
Gigabytes de armazenamento?

11. Seja um computador hipotético com um byte de 6 bits. Quantas informações


distintas podem ser armazenadas por esse byte?

12. Um bit tem dois estados (0 – ligado e 1 – desligado). Quantos estados pode ter
um byte?

13. Um computador tem palavras de 16 bits. Quantos estados diferentes podem ser

32
acessados com uma palavra deste tamanho?

14. Um computador utiliza 3 bytes para armazenar números inteiros. O primeiro bit
do primeiro byte é convencionado representar o sinal (0 – positivo e 1 –
negativo) e os bits restantes do primeiro byte e dos demais bytes são usados para
representar o módulo do número inteiro. Qual é, então, o maior número inteiro
decimal positivo que pode ser representado nesta arquitetura?

15. Coloque V para verdadeiro e F para falso a assertiva:


( ) O scanner é um dispositivo que digitaliza imagens e é um dispositivo
de saída do computador.
( ) Os disquetes de 5 ¼ “ tem capacidade de gravação maior do que os
de 3 ½ “ pois tem área maior de gravação.
( ) O mouse é um típico dispositivo de saída de dados.
( ) O CD-ROM é o dispositivo mais usado para se dar backup diário
dos arquivos do computador.
( ) O modem é um aparelho que possibilita conectar um computador a
outro usando a linha telefônica.

16. Conforme a classificação do software, coloque a sigla apropriada:


Software Básico (SB), Aplicação (AP) e Sistema Aplicativo (SA).
( ) Editor de texto Word 6.0
( ) Sistema de Automatização de Biblioteca
( ) Compilador Pascal
( ) Editor de texto Wordstar
( ) Sistema Operacional DOS

17. Marque V caso seja verdadeiro e F caso seja falso a assertiva:


( ) O compilador traduz um programa de linguagem de alto nível para
um programa executável.
( ) O compilador deve estar presente quando da execução do programa.
( ) O compilador Pascal é igual ao compilador C, mudando apenas a
linguagem objeto.
( ) Para cada linguagem de programação há um único compilador.
( ) A linguagem de máquina é o conjunto de instruções entendidas pelo
hardware.

33
B.Conversão de Números Decimais em Binários e Vice-Versa

1. Converta os seguintes números decimais em números binários:


a) 8 b) 17 c) 32 d) 64 e) 81 f) 93

2. Converta os seguintes números inteiros binários em números decimais:


a) 10 b) 101 c) 1100 d) 11111 e) 101110 f) 1010101

3. Converta os seguintes números fracionários decimais em números binários:


a) 0.5 b) 0.75 c) 0.1 d) 0.3 e) 0.01 f) 9.1

4. Converta os seguintes números binários em números decimais:


a) 0.111 b) 0.1 c) 0.011 d) 0.1101 e) 1.011 f) 101.1101

5. Faça as transformações de base pedidas:


. a) (21.1)10 = ( )2
b) (10011.011)2 = ( )10
c) (19.1)10 = ( )2
d) (10111,011) 2 = ( )10

6. Mover a vírgula decimal em um número binário n casas para a esquerda, ou para


a direita é o mesmo que dividir (ou multiplicar, respectivamente) o número por
2n. Justifique esta afirmativa.

7. Mostre que qualquer número da forma 2-n, onde n é um número inteiro positivo,
pode ser escrito como um número decimal com um número finito de algarismos.

8. Mostre que qualquer fração binária é também uma fração finita, se transformada
em uma fração decimal.

34
C. Introdução aos Algoritmos

1. Suponha que você esteja se dirigindo ao Campus Universitário, conduzindo seu


próprio carro e repentinamente o pneu fura. Faça um roteiro para efetuar a troca
dos pneus e assim poder continuar o seu trajeto.

2. Resolva o exercício 1 supondo possibilidade de quando você abrir o porta-


malas, para retirar o estepe, o mesmo não esteja lá (por exemplo: o estepe foi
roubado).

3. Dados dois recipientes A e B, contendo líquidos que explodem quando


misturados, como fazer para trocar o conteúdo dos recipientes A e B sem que
haja explosão?

4. Você dispõe de um barco para atravessar um rio. O barco tem capacidade para
você mais uma de suas três cargas que são: um tigre, uma ovelha e um maço de
alface. Como atravessar as três cargas para o outro lado do rio, sabendo-se que a
ovelha come a alface e o tigre devora a ovelha mas não come a alface?

5. Nove homens e dois meninos querem atravessar um rio, usando uma pequena
canoa com capacidade para levar ou um homem ou os dois meninos. Quantas
vezes o barco terá de atravessar o rio para atingir a meta?

6. Três missionários e três canibais encontram-se numa margem de um rio e todos


precisam passar para a outra margem. Um barco com a capacidade máxima de
dois passageiros está disponível na margem em que se encontram os
missionários e os canibais. Os missionários desconfiam dos canibais de tal
maneira que evitam em qualquer ponto (margens e na travessia) que o número
de canibais seja maior que deles (missionários). Descubra uma estratégia (caso
exista) para atravessar todos em segurança para a outra margem.

7. Você recebe dois vasilhames d´água, um de 4 litros e outro de 3 litros . Nenhum


deles possui qualquer marcação de medida. Há uma bomba que pode ser
utilizada para encher os vasilhames de água. Como você poderá colocar
exatamente 2 litros d´água dentro do vasilhame de 4 litros?

8. A torre de Hanoi consiste de três hastes (a, b e c), uma das quais serve de
suporte para três discos de tamanhos diferentes (1, 2 e 3), os menores sobre os
maiores. Pode-se mover um disco de cada vez para qualquer haste, contanto que
nunca seja colocado um disco maior sobre um disco menor. O objetivo é
transferir os três discos para a outra haste.
9. Qual o padrão de comportamento para gerarmos a seqüência: 1 5 9 13 17 21 25.
10. E para a seqüência: 1 7 13 19 25 31. O padrão de comportamento deste
exercício é igual ao do exercício anterior?

35
D. Algoritmos

1 Imprima a mensagem "As coisas boas na vida são as coisas simples".

2 Leia e imprima um valor numérico.

3 Lidos dois números A e B, imprima a soma desses números.

4 Leia três valores numéricos e imprima o somatório dstes números.

5 Dado o raio de um círculo, calcular sua área e perímetro.

6 Considere um retângulo de lados L1 e L2. Calcular a área e o perímetro desse


retângulo, lidos os lados.

7 Dados os dois catetos (A e B) de um triângulo retângulo, calcular a hipotenusa.

8 Leia três valores numéricos e imprima o produto entre estes números.

9 Dados três números X,Y e Z, calcular a média aritmética desses números.

10 Lidas três notas de um aluno nota1, nota2 e nota3, calcule a média do aluno.
Imprima a média.

11 Lido um número A, se ele for maior ou igual a 5, então imprima "Aprovado"; se


for menor que 5, então imprima "Reprovado".

12 Leia um número, caso este seja maior que 50 imprimir a mensagem “É maior
que cinqüenta” caso contrário deve imprimir “É menor que cinqüenta”.

13 Leia o nome do aluno, sua respectiva nota final e o total de presenças. Sabendo-
se que a freqüência necessária é de no mínimo 75% e o total de aulas
ministradas foi de 60 aulas e que a nota mínima deve ser maior ou igual a cinco.
Checar e imprimir se este aluno foi aprovado ou reprovado.

14 Lidas três notas de um aluno nota1, nota2 e nota3, calcule a média do aluno.
Imprima a média. Se a média for maior ou igual a 5, então imprima "Aprovado";
se for menor que 5, então imprima "Reprovado".

15 Lidos dois números A e B, se A for maior que B, então imprima a diferença de


A menos B; se A for menor ou igual a B, então imprima a diferença de B menos
A.

16 Lidas as notas parciais de um aluno (em número de quatro) e sua freqüência,


calcule sua média final e decida se o aluno está aprovado ou não.

17 Leia o nome do aluno, sua respectiva nota final, o total de presenças e o número

36
total de aulas ministradas. Sabendo-se que a freqüência necessária é de no
mínimo 70% das aulas ministradas e que a nota mínima deve ser maior ou
igual a 7.0, checar e imprimir o nome do aluno, nota final, total de presenças e
uma mensagem dizendo se este aluno foi aprovado ou reprovado.

18 Dados três valores X, Y e Z, verificar se eles podem ser os comprimentos dos


lados de um triângulo e, se forem, verificar se é um triângulo equilátero,
isósceles ou escaleno. Se eles não formarem um triângulo escrever uma
mensagem de erro.

19 Lido um número inteiro n (n ≥ 0), verificar se êle é par ou ímpar.

20 Em um colégio ao final do ano o aluno estará aprovado se tiver obtido média


final igual ou superior a 7.0 e freqüência superior ou igual a 200. Caso contrário
se a média final for igual ou superior a 5.0 e menor que 7.0 estará em
recuperação, desde que suas presenças sejam superiores a 150. Nos outros casos
o aluno estará reprovado.

21 Leia três valores numéricos e imprima o maior deles.

22 Lidos dois números A e B, imprima o maior deles.

23 Dados dois números imprimí-los em ordem descendente.

24 Dados dois números imprimí-los em ordem ascendente.

25 Leia três valores numéricos e imprima o maior e o menor valor.

26 Lidos três números, imprimir o maior, o menor e a média aritmética.

27 Lidos um conjunto de 5 números, elimine o maior e o menor do


conjunto e calcule e escreva média aritmética dos 3 números
restantes.

28 Lido um número inteiro positivo entre 0 e 200, escreva-o por extenso.

29 Imprima 100 vezes a mensagem "As coisas boas na vida são as coisas simples".

30 Lido um conjunto de 40 números inteiros positivos, conte os números pares e os


ímpares.

31 Leia um número indeterminado de linhas contendo cada uma a idade de um


indivíduo. A última linha, que não deverá entrar nos cálculos, contém o valor da
idade igual a zero. Calcule e imprima a idade média dos indivíduos.

32 Uma turma tem n alunos. Para cada aluno, calcule a média, lidas as três notas
nota1, nota2 e nota3, imprima a média e "Aprovado" se a média for maior ou

37
igual a 5 e "Reprovado" se a média for menor que 5.

33 Foi feita uma pesquisa de audiência de canal de TV em várias casas de uma certa
cidade. Para cada casa visitada é fornecido o número do canal (4, 5, 7 e 12) e o
número de pessoas que estavam assistindo naquela casa. Ler um número
indeterminado de dados (o últimó dado possui canal igual a zero) e calcule e
imprima para cada emissora a respectiva porcentagem de audiência.

34 Tem-se um conjunto de dados contendo a altura e o sexo de 50 pessoas. Calcule


e escreva: (a) a maior e a menor altura do grupo; (b) a média de altura das
mulheres; ( c) o número de homens.

35 Num frigorífico existem 90 bois. Cada boi traz preso em seu pescoço um cartão
contendo seu número de identificação e seu peso. Escreva o número e o peso do
boi mais gordo e do boi mais magro.

36 Pode-se aproximar a raiz quadrada de um número subtraindo-


se sucessivamente números ímpares mais altos do número
original até que o número original seja inferior ou igual a zero.
O número de subtrações é igual à raiz quadrada aproximada do
número original.
Ex.: 23 - 1 = 22
22 - 3 = 19
19 - 5 = 14
14 – 7 = 7 raiz quadrada ≅ 4
7 – 9 = -2

37 A raiz quadrada de um número a pode ser calculada através da equação iterativa

x i+1 = xi – xi2 - a
2xi
Sendo dado o valor inicial x0, calcule a raiz quadrada de 2.

38 Supondo que a população de um país A seja da ordem de 90.000.000 de


habitantes com uma taxa anual de crescimento de 3% e que a população de um
país B seja, aproximadamente, de 200.000.000 de habitantes com uma taxa de
crescimento de 1,5%. Calcule e escreva o número de anos necessários para que a
população do país A ultrapasse ou iguale a população do país B, mantidas estas
taxas de crescimento.

39 Calcular a soma dos números pares desde 100 até 200, inclusive.

40 Calcule e escreva uma tabela de centígrados em função de graus Farenheit, que


variam de 50 a 150 de 1 em 1.

41 Calcule e escreva o número de grãos de trigo que se pode colocar num tabuleiro
de xadrez, colocando 1 no primeiro quadrado e nos seguintes o dobro do

38
quadrado anterior. O tabuleiro de xadrez é composto de 64 quadrados.

42 O número 3025 possui a seguinte característica:


30 + 25 = 55 552 = 3025
Pesquise e imprima todos os números de quatro algarismos que apresentam tal
característica.

43 Números perfeitos são números inteiros para os quais a soma dos seus divisores
é igual ao produto dos mesmos.

Ex.: 6 = 1 + 2 + 3 = 1 x 2 x 3.

Verifique quantos números perfeitos existem entre 1 e 10.000.

44 Qual é o menor número inteiro que é igual a uma soma de quadrados e a uma
soma de cubos?
.
45 Calcular a soma dos números ímpares entre 0 e um numero inteiro positivo M
qualquer.

46 Lidos dois números inteiros positivos M e N, escreva os


números pares entre estes números.

47 Lidos dois números inteiros M e N, escreva os números pares entre M e N,


inclusive.

48 Calcule o fatorial de n.

49 Verifique se um número n (n>0) é primo.

50 Lidos dois números inteiros positivos M e N, escreva os


números primos entre estes números.

51 Gere os primeiros n números primos.

52 Lidos dois números inteiros positivos P e Q, calcule o mmc desses dois


números.

53 Lidos dois números inteiros positivos P e Q, calcule o mdc desses dois números.

54 Calcule a soma dos n primeiros termos da série

A = 1 -3 5 -7 9 -11 13 -15 ...

55 Calcule a soma dos n primeiros termos da série

H = 1 + ½ + 1/3 + ¼ + 1/5 + ...

39
56 A seqüência de Fibonacci se define como tendo o primeiro termo igual a 0 e o
segundo termo igual a 1 e cada termo seguinte é igual a soma dos dois termos
imediatamente anteriores. Escrever a seqüência de Fibonacci dos termos
inferiores a um número inteiro L qualquer.

57 Escrever o termo que corresponda ao n-ésimo termo de uma seqüência de


Fibonacci.

58 Aplique a função ex para um determinado valor usando a série


ex = 1 + x + x2 + x3 + x4 + x5 - ...
2! 3! 4! 5!

59 Calcule e escreva o valor de S:


S = 1/1 + 3/2 + 5/3 + 7/4 + ... + 99/50

60 Calcule o valor do seno de um ângulo usando a série


sen x = x – x3 + x5 – x7 + x9 - ...
3! 5! 7! 9!

61 Calcule o valor do cosseno de um ângulo usando a série


cos x = 1 – x2 + x4 – x6 + x8 - ...
2! 4! 6! 8!

62 Calcule e escreva o valor de π, com precisão de 0.01, dado pela série:


π = 4 - 4/3 + 4/5 - 4/7 + 4/9 - 4/11 ...
Sugestão: para obter a precisão desejada, adicionar apenas os termos cujo valor
absoluto seja maior ou igual a 0.01

63 Converta um número inteiro decimal em binário.

64 Lido um número inteiro positivo, escreva-o na ordem inversa.

65 Leia e escreva um array numérico de 5 elementos.

66 Leia e escreva um array numérico de n elementos.

67 Leia um array numérico de 5 elementos e calcule a soma


destes números.

68 Leia um array numérico de n elementos e calcule a soma


destes números.

69 Leia um array numérico de 5 elementos e calcule a média


aritmética destes números.

70 Leia um array numérico de n elementos e calcule a média

40
aritmética destes números.
71 Lido um string, escreva-o na ordem inversa (palíndromo).

72 Lidos dois vetores A, de tamanho m e B, de tamanho n, calcule


o vetor C, soma de A e B.

73 Lido um string, conte quantas vogais existem.

74 Lido um string, escrever quantas e quais são as vogais.

75 O produto interno entre dois vetores A e B é o escalar obtido por ∑ ai bi, onde n
é o tamanho dos dois vetores.

76 Lidos dois strings A e B, verifique se o string B está contido em A.

77 Lido um array numérico de n elementos, ache o maior.

78 Lido um conjunto de n elementos, ordená-lo crescentemente.

79 Leia uma matriz de dimensões 3x3.

80 Leia uma matriz de dimensões mxn.

81 Leia uma matriz A e calcule a soma de seus elementos.

82 Leia uma matriz A e calcule a média aritmética de seus


elementos.

83 Leia uma matriz A e ache o maior elemento.

84 Lidas duas matrizes A, de dimensões mxn e B, de dimensões


pxq, calcule a matriz C, soma de A e B.

85 Lida uma matriz, gere sua matriz transposta.

86 Lidas duas matrizes A, de dimensões mxn e B, de dimensões


pxq, calcule a matriz C, produto de A e B.

87 Lida uma matriz quadrada, calcule a somatória dos elementos


da diagonal principal.

88 Lida uma matriz, calcule a porcentagem de elementos nulos desta matriz.

89 Lidas duas matrizes verifique se uma é inversa da outra.

90 Lida uma matriz quadrada verifique se ela é triangular superior.

41
91 Gere o movimento do bispo no jogo de xadrez.

92 Gere o movimento da torre no jogo de xadrez.

93 Lidos dois conjuntos A, de tamanho n, e B, de tamanho m, gere


o conjunto C, união de A e B.

94 Lidos dois conjuntos A, de tamanho n, e B, de tamanho m, gere


o conjunto C, interseção de A e B.

95 Cálculo da derivada de um polinômio.

42
6 . EXERCÍCIOS RESOLVIDOS

1. Dados três valores X, Y e Z, verificar se eles podem ser os comprimentos dos lados de
um triângulo e, se forem, verificar se é um triângulo eqüilátero, isósceles ou escaleno. Se
eles não formarem um triângulo escrever uma mensagem de erro.

Apresentaremos e discutiremos três soluções.

Solução 1:
Algoritmo
Declare X, Y, Z numérico

Leia X, Y, Z
Escreva X, Y, Z

Se X < Y + Z e Y < X + Z e Z < X + Y { Teste de Existência de Triângulo }


então
Se X = Y e Y = Z
então escreva “Triângulo Equilátero”
senão
Se X ≠ Y e X ≠ Z e Y ≠ Z
então escreva “Triângulo Escaleno”
senão escreva “Triângulo Isósceles”
Fim-se
Fim-se

senão escreva “Os segmentos X, Y e Z não podem gerar um triângulo”


Fim-se

Fim-Algoritmo

Na primeira solução usamos o operador lógico E para testar a existência do triângulo. Na


segunda solução usaremos o operador lógico OU.

Como vamos usar outro operador lógico, devemos achar uma relação de equivalência que
relacione os operadores lógicos E e OU. Esta relação é dada pelo Teorema de De Morgan.

O Teorema de De Morgan nos diz que

A e B = não (não A ou não B)


A ou B = não (não A e não B)

O teorema de De Morgan é demonstrado facilmente usando tabelas-verdade.

Chamando A = (X < Y + Z) , B = (Y < X + Z) e C = (Z < X + Y) , teremos:

A e B e C = não (não A ou não B ou não C)


Aplicando este resultado na solução anterior, geraremos a segunda solução:

43
Solução 2:
Algoritmo
Declare X, Y, Z numérico

Leia X, Y, Z
Escreva X, Y, Z

Se não (X ≥ Y + Z ou Y ≥ X + Z ou Z ≥ X + Y ) { Teste de Existência de


Triângulo }
então
Se X = Y e Y = Z
então escreva “Triângulo Equilátero”
senão
Se X ≠ Y e X ≠ Z e Y ≠ Z
então escreva “Triângulo Escaleno”
senão escreva “Triângulo Isósceles”
Fim-se
Fim-se
senão escreva “Os segmentos X, Y e Z não podem gerar um triângulo”

Fim-se
Fim-Algoritmo

A terceira solução é obtida retirando-se o Não do teste de existência do triângulo.


Solução 3:
Algoritmo
Declare X, Y, Z numérico
Leia X, Y, Z
Escreva X, Y, Z
Se X ≥ Y + Z ou Y ≥ X + Z ou Z ≥ X + Y { Teste de Existência de Triângulo}
então escreva “Os segmentos X, Y e Z não podem gerar um triângulo”
senão
Se X = Y e Y = Z
então escreva “Triângulo Equilátero”
senão
Se X ≠ Y e X ≠ Z e Y ≠ Z
então escreva “Triângulo Escaleno”
senão escreva “Triângulo Isósceles”
Fim-se
Fim-se
senão escreva “Os segmentos X, Y e Z não podem gerar um triângulo”
Fim-se
Fim-Algoritmo

Observe que com a retirada do Não houve uma inversão entre as condições do Então e do
Senão. Compare e analise as diferenças entre as três soluções.

44
2. Em um colégio ao final do ano o aluno estará aprovado se tiver obtido média final igual
ou superior a 7.0 e freqüência superior ou igual a 200. Caso contrário se a média final for
igual ou superior a 5.0 e menor que 7.0 estará em recuperação, desde que suas presenças
sejam superiores a 150. Nos outros casos o aluno estará reprovado.
Elabore um algoritmo que leia as notas parciais de um aluno (em número de quatro) e sua
freqüência, calcule sua média final e decida se o aluno está aprovado ou não.

Solução:

Algoritmo
Declare Nome literal
Declare Nota_1, Nota_2, Nota_3, Nota_4, Freq, Média numérico

Leia Nome, Nota_1, Nota_2, Nota_3, Nota_4, Freq


Escreva Nome, Nota_1, Nota_2, Nota_3, Nota_4, Freq

Média ← (Nota_1 + Nota_2 + Nota_3 + Nota_4)/4


Escreva Média

Se Média ≥ 7.0 e Freq ≥ 200


então
escreva "Aprovado"
senão
Se Média ≥ 7.0 { Não é necessário testar aqui se Freq < 200 }
então
escreva "Recuperação"
senão
Se Média ≥ 5.0 e Freq ≥ 150 { Não é necessário testar aqui se Média ≤
7.0 }
então
Escreva "Recuperação"
senão
Escreva "Reprovado"
Fim-se
Fim-se
Fim-se
Fim-Algoritmo

Exercício: Lido um número inteiro n (n ≥ 0), verificar se êle é par ou ímpar.

Apresentaremos três soluções.

Solução 1:
Algoritmo
Declare N, X numérico

Leia N
Se N < 0

45
então escreva "O número ", N," é negativo"
senão
X ← N/2
Se Trunca(X) x 2 = N
então escreva "O número ", N," é par"
senão escreva "O número ", N," é ímpar"
Fim-se
Fim-se
Fim-Algoritmo

A segunda solução é uma simplificação da primeira.

Solução 2:
Algoritmo
Declare N, X numérico

Leia N
Se N < 0
então escreva "O número ", N," é negativo"
senão
X ← N/2
Se Trunca(X) = X
então escreva "O número ", N," é par"
senão escreva "O número ", N," é ímpar"
Fim-se
Fim-se
Fim-Algoritmo

A terceira solução parece mais simples pois usa o fato de que para verificar se um número
é par, basta dividí-lo por 2 e verificar se o resto é zero ou não.

Solução 3:
Algoritmo
Declare N numérico

Leia N
Se N < 0
então escreva "O número ", N, " é negativo"
senão
Se Resto (N,2) = 0
então escreva "O número ", N," é negativo"
senão escreva "O número ", N," é ímpar"
Fim-se
Fim-se
Fim-Algoritmo

3: Lido um conjunto de 40 números inteiros positivos, conte os números pares e os


ímpares.

46
Apresentaremos duas soluções.

Solução 1:
Algoritmo
Declare N, Contador, Contador_Par, Contador_Impar numérico

Contador ←0
Contador_Par ←0
Contador_Impar ← 0

Repita
Se Contador = 40
então interrompa
Fim-se
Leia N
Contador ← Contador + 1
Se N ≥ 0
então Se Resto(N,2) = 0
então Contador_Par ← Contador_Par + 1
senão Contador_Impar ← Contador_Impar + 1
Fim-se
Fim-se
Fim-Repita

escreva "Números Lidos ", Contador


escreva "Total de números pares ", Contador_Par
escreva "Total de números ímpares ", Contador_Impar

Fim-Algoritmo

47
A segunda solução requer uso de um flag, não sendo necessário ler o total de alunos da
sala..

Solução 2:
Algoritmo
Declare N, Contador_Par, Contador_Impar numérico

Contador_Par ←0
Contador_Impar ← 0

Repita
Leia N
Se N = -99 { Teste de parada com o flag -99 }
então interrompa
Fim-se
Se N ≥ 0
então Se Resto(N,2) = 0
então Contador_Par ← Contador_Par + 1
senão Contador_Impar ← Contador_Impar + 1
Fim-se
Fim-se
Fim-Repita

escreva "Total de números pares ", Contador_Par


escreva "Total de números ímpares ", Contador_Impar

Fim-Algoritmo

4: Calcule a soma dos n primeiros termos da série

A = 1 -3 5 -7 9 -11 13 -15 ...

Apresentaremos duas soluções.

Solução 1:

a.Análise do Problema
O termo inicial é 1, cada termo subseqüente é igual em módulo ao termo anterior somando-
se e alternando o sinal.

b.Solução:

Algoritmo

Solução 2:

48
Trata-se de uma série alternada, i.e. os termos trocam de sinais alternadamente.
O termo geral da série é

ai = (-1)i+1 (2i - 1)

A somatória é dada por


n n
S = Σ ai = Σ (-1)i+1 (2i - 1)
i =1 i =1

b.Solução:

Algoritmo
Declare N, A, Soma, I numérico

Leia N
Se N < 0
então escreva "Número incorreto ",N
senão
I ← 1
Soma ← 0
Repita
Se I > N
então interrompa
Fim-se
A ← (-1) I+1 * (2 * I - 1)
I ← I+1
Soma ← Soma + A
Fim-Repita
Escreva N, Soma
Fim-se
Fim-Algoritmo

49
Exercícios

1. Lidos n números, escreva o maior.

Solução:

Uma primeira abordagem nos dá:

Algoritmo
Leitura_do_Array_A
Procura_Maior
Imprime Maior
Fim-Algoritmo

Desenvolvendo os módulos obtemos:

Algoritmo
Declare A array[1..100] numérico
Declare I, N, Maior numérico

{ Leitura do Array A }

Leia N
I ←1
Repita
Se I = N + 1
então interrompa
Fim-se
Leia A[I]
I ← I+1
Fim-Repita

{ Procura do Maior }

Maior ← A[1]
I ←2
Repita
Se I = N + 1
então interrompa
Fim-se
Se A[I] > Maior
então Maior ← A[I]
Fim-se
I ← I+1
Fim-Repita

{ Impressão do Maior }

Escreva Maior

50
Fim-Algoritmo

Sugerimos testar o algoritmo para o seguinte conjunto de dados:


n=5
1 2 3 4 5

A 0.75 2.25 1.25 1.25 0.91

51
2.a) Lidos um número k, verifique se êle pertence ou não a um array lido A, de tamanho n.

Apresentaremos e discutiremos duas soluções.


Solução 1:
Uma primeira abordagem nos dá:

Algoritmo
Leitura_do_Valor_k
Leitura_do_Array_A
Verifica_Presença
Fim-Algoritmo

Desenvolvendo os módulos obtemos:

Algoritmo
Declare A array[1..100] numérico
Declare i, k numérico

{ Leitura do Valor k }
Leia k

{ Leitura do Array A }

Leia N
I ←1
Repita
Se I = N + 1
então interrompa
Fim-se
Leia A[I]
I ← I+1
Fim-Repita

{ Verifica Presença }
I ←1
Repita
Se I = N + 1
então interrompa
Fim-se
Se A[I] = k
então Escreva "k pertence ao array A"
Fim-se
I ← I+1
Fim-Repita
Fim-Algoritmo

Ao simularmos a execução do algoritmo para um conjunto de dados como os apresentados


abaixo:

52
k = 1.25
n=5
1 2 3 4 5

A 0.75 2.25 1.25 1.25 0.91

verificamos que a mensagem "k pertence ao array A" será impressa duas vêzes quando
apenas uma vez seria suficiente.
Por outro lado se simularmos a execução do algoritmo para um conjunto de dados como os
apresentados abaixo:
k = 0.88
n=5
1 2 3 4 5

A 0.75 2.25 1.25 1.25 0.91

verificamos que a nenhuma mensagem será impressa, quando


poderíamos declarar que o número k não pertence ao array A.

O algoritmo 2 procura sanar essas deficiências.

Solução 2:

Algoritmo
Declare A array[1..100] numérico
Declare i, k numérico
Declare Achei lógico

{ Leitura do Valor k }
Leia k

{ Leitura do Array A }

Leia N
I ←1
Repita
Se I = N + 1
então interrompa
Fim-se
Leia A[I]
I ← I+1
Fim-Repita

{ Verifica Presença }
Achei ← Falso
I ←1
Repita
Se I = N + 1 ou Achei = Verdadeiro
então interrompa
Fim-se

53
Se A[I] = k
então Achei ← Verdadeiro
Fim-se
I ← I+1
Fim-Repita

Se Achei = Verdadeiro
então Escreva "k pertence ao array A"
senão Escreva "k não pertence ao array A"
Fim-se

Fim-Algoritmo

54