Lógica de Programação

Page 1

RONNEESLEY MOURA TELES

´ ˜ LOGICA DE PROGRAMAC ¸ AO


´ SUMARIO 1

2

O CURSO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4

1.1 Ementa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4

1.2 Introdu¸c˜ ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4

1.3 Ferramentas utilizadas . . . . . . . . . . . . . . . . . . . . . . . . . . .

4

1.4 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4

˜ A CIENCIAS ˆ ˜ INTRODUC ¸ AO DA COMPUTAC ¸ AO . . . . . . . . . . . . .

6

2.1 Processamento de Dados . . . . . . . . . . . . . . . . . . . . . . . . . .

6

2.2 Evolu¸c˜ ao da Tecnol´ ogica dos Computadores

. . . . . . . . . . . . . .

6

2.3 O Computador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8

2.3.1

Anal´ogico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8

2.3.2

Digital . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9

2.4 Estrutura de um computador digital . . . . . . . . . . . . . . . . . . . 10 2.5 Pe¸cas do Computador . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.5.1

A Mem´oria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.5.2

A Unidade Central de Processamento (CPU) . . . . . . . . . . . . . 12

2.5.3

Teclado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

2.5.4

Monitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

2.5.5

Impressora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

2.5.6

Disquete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2.6 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3

ALGORITMOS

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3.1 Conceito de A¸c˜ ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.2 Conceito de Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.3 Refinamentos Sucessivos . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.3.1

Estrutura Condicional . . . . . . . . . . . . . . . . . . . . . . . . . 20

3.3.2

Estrutura de Repetic¸˜ao . . . . . . . . . . . . . . . . . . . . . . . . 20

3.3.3

Conclus˜ao do Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . 20

3.4 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 4

ALGORITMOS ESTRUTURADOS . . . . . . . . . . . . . . . . . . . . . . 23 4.1 Plajenamento do Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . 23 4.2 Previs˜ ao e Capacidade dos Primeiros Algoritmos . . . . . . . . . . . . 23


4.3 Consequˆ encia da Evolu¸c˜ ao das Tecnologias na Eletrˆ onica . . . . . . . 24 4.4 Desenvolvimento Estruturado . . . . . . . . . . . . . . . . . . . . . . . 24 4.5 Diagrama de Blocos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 4.6 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 5

˜ LINGUAGENS DE PROGRAMAC ¸ AO

. . . . . . . . . . . . . . . . . . . . 28

5.1 Mais Antigas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 5.1.1

Fortran . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

5.1.2

Cobol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

5.1.3

Basic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

5.2 Mais Recentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 5.2.1

Pascal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

5.2.2

C

5.2.3

C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

5.2.4

Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

5.2.5

Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

5.2.6

PHP (Hypertext Preprocessor) . . . . . . . . . . . . . . . . . . . . 36

5.2.7

Ruby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

5.2.8

Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

5.3 Scripts

6

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

5.3.1

Shell Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

5.3.2

JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

FUNDAMENTOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 6.1 Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 6.1.1

Num´ericas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

6.1.2

L´ogicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

6.1.3

Literais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

6.2 Vari´ aveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 6.2.1

Formac¸˜ao dos Identificadores . . . . . . . . . . . . . . . . . . . . . 43

6.2.2

Declarac¸˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

6.3 Coment´ arios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 6.4 Express˜ oes aritm´ eticas . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 6.5 Express˜ oes l´ ogicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46


6.5.1

Relac¸o˜es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

6.5.2

Operadores l´ogicos . . . . . . . . . . . . . . . . . . . . . . . . . . 47

6.5.3

6.5.2.1

Conjunc¸˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

6.5.2.2

Disjunc¸˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

6.5.2.3

Negac¸˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

Prioridade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

6.6 Express˜ oes Literais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 6.7 Comando de Atribui¸c˜ ao . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 6.8 Comandos de entrada e sa´ıda . . . . . . . . . . . . . . . . . . . . . . . 50 6.8.1

Comando de entrada . . . . . . . . . . . . . . . . . . . . . . . . . 50

6.8.2

Comando de sa´ıda . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

6.9 Fun¸c˜ oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 6.10 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 7

CONTROLE DE FLUXO . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 7.1 Estrutura sequencial

. . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

7.2 Estrutura condicional . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 7.2.1

Estrutura condicional simples . . . . . . . . . . . . . . . . . . . . . 58

7.2.2

Estrutura condicional composta . . . . . . . . . . . . . . . . . . . . 59

7.3 Estrutura de repeti¸c˜ ao . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 7.3.1

Interrupc¸˜ao no in´ıcio . . . . . . . . . . . . . . . . . . . . . . . . . 60

7.3.2

Interrupc¸˜ao no meio . . . . . . . . . . . . . . . . . . . . . . . . . . 61

7.3.3

Interrupc¸˜ao no fim . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

7.4 Estrutura de repeti¸c˜ ao nas linguagens de programa¸c˜ ao . . . . . . . . 63 7.4.1

Estrutura enquanto . . . . . . . . . . . . . . . . . . . . . . . . . . 63

7.4.2

Estrutura repita ... at´e . . . . . . . . . . . . . . . . . . . . . . . . 63

7.4.3

A estrutura de repetic¸˜ao para interrupc¸˜oes no meio . . . . . . . . . 63

7.4.4

A estrutura para . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

7.5 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 ˆ REFERENCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71


1

O CURSO A disciplina L´ogica de Programac¸˜ao ou T´ecnicas de Programac¸˜ao s˜ao disciplinas que

tratam dos princ´ıpios b´asicos para criac¸˜ao de softwares. Pr´e-requisitos: operac¸˜ao de computadores (instalar programas, usar o computador, etc.). 1.1

Ementa Desenvolvimento de algoritmos. Tipos de dados b´asicos e estruturados. Comandos de

uma linguagem de programac¸˜ao. Metodologia de desenvolvimento de programas. Modularidade e abstrac¸˜ao. 1.2

Introdu¸c˜ ao Neste curso, ser˜ao apresentados os conceitos de: constantes, vari´aveis, tipos de da-

dos, palavras-chave, nomenclatura de vari´aveis, express˜oes (l´ogicas, literais e aritm´eticas), estruturas de programac¸˜ao (sequencial, condicional e repetic¸˜ao), func¸˜oes, vetores, matrizes, modularizac¸˜ao. 1.3

Ferramentas utilizadas ´ • Code.org: trata-se de um ambiente de apredizado para iniciantes em programac¸˜ao. E uma ferramenta Web gratuita dispon´ıvel em hhttps://code.orgi, precisa apenas cadastrarse para utiliz´a-la. • Portugol Studio: trata-se de um ambiente que permite simular um algoritmo no com´ uma ferramenta gratuita que pode ser obtida no enderec¸o hhttp://lite.acad. putador1 . E univali.br/portugoli.

1.4

Exerc´ıcios

1. O que ´e uma m´aquina de Turing? 2. Qual a similaridade da m´aquina de Turing com os computadores atuais? 1

A partir do momento que ´e poss´ıvel executar no computador, este ´e chamado de programa. Neste contexto ´e chamado de algoritmo somente por quest˜oes did´aticas.

4


3. Quem foi o primeiro programador de computador? 4. Qual a vers˜ao atual do Portugol Studio? 5. Cite pelo menos trˆes sistemas operacionais. 6. Cite o nome de pelo menos trˆes editores de textos.

5


˜ A CIENCIAS ˆ ˜ INTRODUC ¸ AO DA COMPUTAC ¸ AO

2 2.1

Processamento de Dados Processar dados consiste em obter uma informac¸˜ao, process´a-la e exibir os resultados.

Quando o ser humano comec¸ou a processar grandes quantidades de dados ele tentou construir uma m´aquina para ajud´a-lo na tarefa. O computador ´e o resultado destas tentativas e hoje ´e uma das principais invenc¸o˜es do s´eculo XX (FARRER et al., 1999, p. 1). 2.2

Evolu¸c˜ ao da Tecnol´ ogica dos Computadores Primeira gerac¸˜ao, aconteceu de 1951 at´e 1959, usavam circuitos eletromecˆanicos e

v´alvulas (Figura 1a). Os computadores chegavam a ocupar pr´edios inteiros (Figura 1b). Segunda gerac¸˜ao, durante os anos de 1959 at´e 1965, ocorreu a invens˜ao do transistor (Figura 2) para substituic¸˜ao das v´alvulas. O transistor era aproximadamente 100 vezes menor que a v´alvula, n˜ao precisava de tempo para aquecimento, consumia menos energia e era mais r´apido e mais confi´avel. Figura 1 – Componentes da primeira gerac¸˜ao. (b) ENIAC (Electronic Numerical Integrator and Computer).

(a) V´alvula.

6


Figura 2 – Quatro diferentes modelos de transistor.

Terceira gerac¸˜ao, aconteceu de 1965 at´e 1975, ocorreu a substituic¸˜ao dos transistor pelos circuitos integrados (Figura 3). Figura 3 – Circuito integrado.

Quarta gerac¸˜ao, de 1975 at´e ..., os circuitos integrados (CI’s) ainda menores chamados de: LSI (Large Scale of Integration), VLSI (Very Large Scale of Integration) e ULSI (Ultra Large Scale of Integration). Figura 4 – Computador Apple Lisa.

7


Alguns autores mais atuais mencionam a quinta gerac¸˜ao ocorrendo de 1991 at´e os dias de atuais. Nestas estariam presentes os computadores de 64 bits, processadores que utilizam as arquiteturas RISC (Reduced Instruction Set Computer) e CISC (Complex Instruction Set Computer), discos r´ıgidos com capacidade superior a 600 GB (Figura 5), pen-drives superiores a 1 GB (FARIAS, 2017). Figura 5 – iMac.

2.3

O Computador Existem dois tipos de computadores: os anal´ ogicos (do grego analogos, significa pro-

porcionado), e os digitais (do grego digitus, significa dedo). 2.3.1 Anal´ogico O termˆometro ´e uma exemplo de funcionamento anal´ogico. Nele a dilatac¸˜ao do merc´urio ´e an´aloga a mudanc¸a de temperatura. A caracter´ıstica principal dos computadores anal´ogicos ´e lidar com grandezas cont´ınuas. As vari´aveis de um problema s˜ao representadas por tens˜oes, que s˜ao quantidades f´ısicas cont´ınuas. A Figura 6 apresenta alguns computadores anal´ogicos.

8


Figura 6 – Computadores Anal´ogicos (b) AKAT-1: O primeiro analisador de ED usando transistores.

(c) Newmark analogue computer: analisador de ED.

(a) ELWAT: Analisador de equac¸˜ oes diferenciais (ED), modelagem e controle de processos.

2.3.2 Digital S˜ao os mais utilizados e o estudo de algoritmos se dar´a com eles. “Os computadores digitais s˜ao capazes de somar, subtrair, multiplicar, dividir e comparar atrav´es de pulsac¸˜oes el´etricas que, em u´ltima an´alise, representam os d´ıgitos 0 (ausˆencia de corrente) e 1 (presenc¸a de corrente)” (FARRER et al., 1999, p´agina 2). A Figura 7 apresenta exemplos de computadores digitais. Figura 7 – Computadores Digitais (b) PDA (Personal Digital Assistants). (a) Computador Pessoal.

9


2.4

Estrutura de um computador digital O computador digital possui cinco divis˜oes: unidade de entrada, unidade de controle,

unidade l´ogica e aritm´etica, unidade de sa´ıda e mem´oria. A Figura 8 apresenta o relacionamento entre estas divis˜oes, onde as setas indicam as direc¸˜oes de comunicac¸˜ao entre elas (FARRER et al., 1999, p. 2). Figura 8 – Unidade Central de Processamento

A unidade de entrada traduz a informac¸˜ao de uma grande variedade de dispositivos em c´odigo que a unidade central de processamento ´e capaz de entender. De outro lado est´a a unidade de sa´ıda na qual os dados processados s˜ao convertidos de impulsos el´etricos em palavras ou n´umeros que podem ser “escritos” em impressoras ou apresentados em v´ıdeos ou outros dispositivos. A mem´oria armazena os dados e os programas. A unidade l´ogica aritm´etica realiza todos os c´alculos aritm´eticos e qualquer manipulac¸˜ao de dados, sejam eles num´ericos ou n˜ao. Por fim, a unidade de controle ´e respons´avel pelo “tr´afico” dos dados. Ela obt´em os dados armazenados na mem´oria e interpreta-os. Controla a transferˆencia de dados da mem´oria para a unidade l´ogica e aritm´etica, da entrada para a mem´oria e da mem´oria para a sa´ıda.

10


2.5

Pe¸cas do Computador

Figura 9 – Pec¸as do Computador. 01- Monitor; 02- Placa-M˜ae; 03- Processador; 04- Mem´oria RAM; 05- Placas de Rede, Placas de Som, V´ıdeo, Fax...; 06- Fonte de Energia; 07Leitor de CDs e/ou DVDs; 08- Disco R´ıgido (HD); 09- Mouse (Rato); 10- Teclado.

2.5.1 A Mem´oria A Unidade Central de Processamento (CPU) utiliza uma mem´oria de alta velocidade para armazenar, temporariamente, dados e programas que ser˜ao processados. Qualquer programa para ser executado deve estar na mem´oria. Costuma ser chamada de: “mem´oria tempor´aria”, “mem´oria de trabalho”, “mem´oria principal” e Mem´oria RAM. Figura 10 – Mem´oria RAM (Random Access Memory )

11


Ao menor item de informac¸˜ao bin´aria da-se o nome de BIT (BInary digiT ). Pode assumir dois valores: 0 e 1. S˜ao agrupados (Tabela 1) para representar dados e programas. Tabela 1 – M´ultiplos do byte. Unidade 1 byte (B) 1 quilobyte (kB ou Kbytes) 1 megabyte (MB ou Mbytes) 1 gigabyte (GB ou Gbytes) 1 terabyte (TB ou Tbytes) 1 petabyte (PB ou Pbytes) 1 exabyte (EB ou Ebytes) 1 zettabyte (ZB ou Pbytes) 1 yottabyte (YB ou Ybytes)

Quantidade 8 bits 1024 bytes 1024 quilobytes 1024 megabytes 1024 gigabytes 1024 terabytes 1024 petabytes 1024 exabytes 1024 zettabytes

Quando os programas precisam ser armazenados para utilizac¸˜ao futura ou peri´odica s˜ao armazenados em outros tipos de mem´orias. Estas mem´orias s˜ao denominadas “mem´orias de armazenamento secund´ario” ou “mem´orias auxiliares”; Os dados e programas n˜ao s˜ao perdidos ao deligar o sistema (FARRER et al., 1999, p. 3). Figura 11 – Mem´orias Secund´arias (a) Disco R´ıgido (HD).

(b) DVD (Digital Versatile Disc).

2.5.2 A Unidade Central de Processamento (CPU) A sigla CPU significa Central Processing Unit que em portuguˆes quer dizer Unidade Central de Processamento, esta tamb´em ´e chamada simplemente de processador (Figura 12). Devido a sua complexidade ´e dividida em duas partes: unidade de controle e unidade l´ogica e aritm´etica. 12


Figura 12 – CPU em dois ˆangulos. (a) CPU parte de cima.

(b) CPU parte de baixo.

2.5.3 Teclado Figura 13 – Teclados. (b) Teclado com desenho moderno. (a) Teclado padr˜ao.

13


2.5.4 Monitor Figura 14 – Monitores. A superficie na qual a imagem ´e projetada chamamos de tela, ecr˜a ou ´ecran. (b) Monitor LCD (Liquid Crystal Display) ou Display de Cristal L´ıquido.

(a) Monitor CRT (Cathode Ray Tube ou Tubo de Raios Cat´ odicos).

2.5.5 Impressora Figura 15 – Impressoras. (b) Impressora matricial.

(a) Impressora jato de tinta.

14


2.5.6 Disquete Figura 16 – Disquetes. (b) Disquete de 8 polegadas. (a) Disquete de 3,5 polegadas.

2.6

Exerc´ıcios

1. Em que consiste a tarefa de processamento de dados? 2. Qual foi a atitude dos homens quando se depararam com grandes quantidade de dados para processar? 3. Qual o nome dado a m´aquina criada no s´eculo XX para processamento de dados? 4. Descreva cada uma das quatro gerac¸˜oes da evoluc¸˜ao tecnol´ogica dos computadores. 5. Cite os principais componentes eletrˆonicos criados que marcaram as quatro gerac¸o˜es. 6. Cite pelo menos trˆes outros computadores antigos como o ENIAC. 7. Quais os dois tipos de computadores? 8. Cite exemplos de funcionamento anal´ogico. 9. Pode-se dizer que computadores s˜ao somente os computadores pessoais (PCs)? Justifique sua resposta. 10. Qual a capacidade dos disquetes de 3,5 polegadas e dos de 8 polegadas? 11. Qual a diferenc¸a entre impressora matricial e a impressora jato de tinta? 15


12. Qual monitor ´e mais fino e leve: CRT ou LCD? 13. Classifique os dispositivos (teclado, monitor, monitor touchscreen, scanner, impressora, impressora multifuncional, disquete, pen-drive, microfone, cˆamera e caixa de som) quanto a sua natureza: entrada, sa´ıda ou entrada/sa´ıda. 14. Calcule quantos bits s˜ao 5 GB. 15. Calcule quantos gigabytes s˜ao 5.000 MB.

16


3

ALGORITMOS

3.1

Conceito de A¸c˜ ao Antes de definir algoritmos deve-se entender o que ´e uma ac¸˜ao. Uma ac¸˜ao parte de um

estado inicial e ap´os um tempo produz um estado final previs´ıvel e bem definido (FARRER et al., 1999, p. 14). Sequˆencia de Fibonacci ´e definida com os dois primeiros termos iguais a 1 (um) e cada termo seguinte ´e a soma dos dois termos imediatamente anteriores1 .   

1

se n = 1 ou n = 2

f ib(n − 1) + f ib(n − 2)

se n > 2

f ib(n) = 

Isto resulta na sequˆencia: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... Estes n´umeros s˜ao observados nos mercados financeiros, pode ser aplicado na Ciˆencia da Computac¸˜ao, na teoria ´ dos jogos e aparece na natureza como nas folhas de uma brom´elia (Figura 17) (WIKIPEDIA, 2011). Figura 17 – A sequˆencia de Fibonacci na espiral de uma brom´elia.

Dada a sequˆencia solicitou-se que trˆes pessoas escolhessem um valor num´erico L. Elas deviam escrever os termos da sequˆencia de Fibonacci inferiores a este valor: • Ana (L = 50): 1, 1, 2, 3, 5, 8, 13, 21, 34; • Bob (L = 13): 1, 1, 2, 3, 5, 8; 1

Algumas definic¸˜ oes utilizam os dois primeiros n´ umeros iguais a 0 e 1, respectivamente.

17


• Pedro (L = 1): n˜ao escreveu nada. Apenas parte do que as trˆes pessoas fizeram ´e uma ac¸˜ao. A escolha dos valores de L (50, 13 e 1) ´e impreviss´ıvel ent˜ao n˜ao ´e considerada uma ac¸˜ao. J´a a escrita dos termos da sequˆencia inferiores a L ´e uma ac¸˜ao, pois seu estado inicial ´e o valor escolhido para L, ap´os um per´ıodo de tempo limitado (alguns segundos), chega-se num estado final que foi a sequˆencia escrita ou o que n˜ao foi. Mesmo iniciando em momentos diferentes, partindo de valores iniciais distintos e com resultados diferentes. Todos obedeceram um padr˜ao de comportamento ou norma de execuc¸˜ao. Este padr˜ao de comportamento poderia ser escrito assim: escreva os termos da sequˆencia de Fibonacci inferiores a L. 3.2

Conceito de Algoritmo Algoritmo ´e um conjunto de comandos que ao serem obedecidos resulta em v´arias

ac¸˜oes sucessivas (FARRER et al., 1999, p. 14). Todo algoritmo ´e escrito para resolver um problema. Assim define-se um conjunto de comandos que ao serem seguidos obt´em a soluc¸˜ao do problema. Pode-se dizer que Ana, Bob e Pedro ap´os a escolha do valor L, executaram o algoritmo (FARRER et al., 1999, p. 15). Algoritmo 1: Algoritmo da sequˆencia Fibonacci. Algoritmo

1

Escreva os termos da sequˆencia de Fibonacci inferiores a L.

2

fim algoritmo.

3

3.3

Refinamentos Sucessivos Os algoritmos podem ser encontrados em v´arios lugares, como: em instruc¸˜oes de como

utilizar um equipamento eletrodom´estico, numa receita para preparo de um prato, num guia de preenchimento da declarac¸˜ao de imposto de renda, na maneira como as contas de ´agua, luz e telefone s˜ao calculadas mensalmente e no c´alculo da m´edia escolar ´e calculada. Um algoritmo pode ou n˜ao ser considerado completo. Quando todos os comandos s˜ao de entendimento do destinat´ario2 o algoritmo ´e classificado como completo. Os comandos que 2

Geralmente o destinat´ario de um algoritmo ´e o computador.

18


n˜ao s˜ao compreendidos pelo destinat´ario devem ser desdobrados em novos comandos. Este ato de desdobrar ´e chamado de refinamento (FARRER et al., 1999, p. 15). Quando um algoritmo ´e formado por mais de um comando, significa que existem estados intermedi´arios entre o estado inicial e o estado final. O Algoritmo 6 que escreve os n´umeros inferiores a L, poderia ser desdobrado assim: Algoritmo 2: Refinamento: Escreva os termos de Fibonacci inferiores a L. 1

Receba o valor L;

2

Processe os dois primeiros termos;

3

Processe os termos restantes; Os algoritmos e seus refinamentos s˜ao formados por comandos que determinam as

ac¸˜oes a serem executadas pelo seu destinat´ario. Al´em disto, existem estruturas de controle que determinam a ordem em que os comandos s˜ao executados. Estas estruturas controlam se os comandos devem ser executados ou n˜ao, e quando eles devem ser repetidos. Em algoritmos simples, como o Algoritmo 2, vigora a estrutura sequencial, nela os comandos s˜ao executados um ap´os o outro (de cima para baixo). Se um comando de um refinamento for vago ele tamb´em dever´a ser desdobrado. Algoritmo 3: Ref: Processe os dois primeiros termos. 1

Atribua o valor 1 ao primeiro termo;

2

se ele for menor que L ent˜ ao escreva-o

3 4

fim

5

Atribua o valor 1 ao segundo termo;

6

se ele for menor que L ent˜ ao escreva-o

7 8

fim

19


3.3.1 Estrutura Condicional A segunda estrutura de controle3 ´e a estrutura condicional. Com as estruturas condicionais pode-se provocar ou n˜ao a execuc¸˜ao de um comando. Algoritmo 4: Forma geral da estrutura condicional. se condic¸˜ao ent˜ ao

1

comandos

2

fim

3

3.3.2 Estrutura de Repetic¸˜ao A terceira estrutura de controle ´e a estrutura de repetic¸˜ao. Nas estruturas de repetic¸˜ao os comandos s˜ao executados enquanto uma condic¸˜ao for verdadeira; Neste caso a condic¸˜ao ´e “novo termo for menor que L”. Algoritmo 5: Ref: Processe os termos restantes. 1

Calcule o novo termo somando os 2 anteriores;

2

enquanto novo termo for menor que L fa¸ca

3

Escreva o novo termo;

4

Calcule o novo termo somando os 2 anteriores;

5

fim No caso de Bob que escolheu L = 13, o percurso percorrido foi: calcula o novo termo,

1 + 1 = 2, como 2 < 13, escreve o valor 2, calcula o novo termo, 1 + 2 = 3, como 3 < 13, escreve o valor 3, calcula o novo termo, 2 + 3 = 5, como 5 < 13, escreve o valor 5, calcula o novo termo, 3 + 5 = 8, como 8 < 13, escreve o valor 8, calcula o novo termo, 5 + 8 = 13, como 13 n˜ao ´e menor que 13 e interrompe. 3.3.3 Conclus˜ao do Algoritmo Ap´os estes refinamentos o algoritmo estar´a completo, exceto que o destinat´ario: n˜ao saiba fazer adic¸˜ao de dois termos ou n˜ao entenda diretamente algum comando. Caso o algoritmo esteja completo, deve-se colocar em forma de coment´ario os comandos 3

A primeira estrutura apresentada foi a estrutura sequencial.

20


que foram refinados e substituir por seus refinamentos. Algoritmo 6: Algoritmo da sequˆencia Fibonacci. 1

Algoritmo

2

// Escreva os termos da sequˆ encia de Fibonacci inferiores a L.

3

Receba o valor L;

4

// Processe os dois primeiros termos

5

Atribua o valor 1 ao primeiro termo;

6

se ele for menor que L ent˜ ao escreva-o

7 8

fim

9

Atribua o valor 1 ao segundo termo;

10

se ele for menor que L ent˜ ao escreva-o

11 12

fim

13

// Processe os termos restantes

14

Calcule o novo termo somando os 2 anteriores;

15

enquanto novo termo for menor que L fa¸ca

16

Escreva o novo termo;

17

Calcule o novo termo somando os 2 anteriores;

18 19

3.4

fim fim algoritmo. Exerc´ıcios

1. Escreva um algoritmo para encontrar o maior e o menor valor entre dois n´umeros. 2. Escreva um algoritmo para encontrar o valor de f (x) em uma func¸˜ao do primeiro grau. Dado que: f (x) = a · x + b. 3. Escreva um algoritmo para encontrar a raiz de uma func¸˜ao do primeiro grau. Dado que a ra´ız ´e encontrada igualando f (x) a zero, logo 0 = a · x + b de outra forma a · x + b = 0. 4. Escreva um algoritmo para encontrar o valor de f (x) em uma func¸˜ao do segundo grau. Dado que: f (x) = a · x2 + b · x + c.

21


5. Escreva um algoritmo para encontrar as ra´ızes de uma func¸˜ao do segundo grau. Dado que: ∆ = b2 − 4 · a · c e x =

√ −b± ∆ 2·a

e que n˜ao h´a ra´ızes quando o delta ´e negativo.

6. Um algoritmo n˜ ao pode conter um comando como: “Escreva todos os termos da sequˆencia de Fibonacci”. Por quˆe? 7. Escrever um algoritmo que, partindo de diferentes estados iniciais, produza os valores: • 2 4 6 8 10 12 14 • 1 3 5 7 9 11 13 8. Escreva um algoritmo para calcular o deslocamento em um Movimento Retil´ıneo Uniforme (MRU). Dado que: S = So + v · t. 9. Escreva um algoritmo para calcular o deslocamento em um Movimento Retil´ıneo Uniformemente Variado (MRUV). Dado que: S = So + vo · t +

a·t2 2

10. Escreva um algoritmo para calcular a m´edia entre quatro notas.

22


4

ALGORITMOS ESTRUTURADOS Os computadores foram criados para serem mais r´apidos que as pessoas em algumas

tarefas, deste modo Farrer et al. (1999) o descrevem: Os computadores s˜ao m´aquinas destinadas a resolver problemas com grande rapidez: uma operac¸˜ao aritm´etica pode ser efetuada num tempo da ordem de 1 microssegundo, isto ´e, 1 milion´esimo de segundo; os computadores mais potentes est˜ao atingindo o tempo de 1 nanosegundo, isto ´e, 1 milion´esimo de microsegundo (FARRER et al., 1999, p. 19).

Uma decis˜ao humana pode demorar dezenas de segundos (`as vezes, horas ou dias); Logo de nada adiantaria se ap´os uma operac¸˜ao feita em 1 nanosegundo, o computador tivesse que esperar uma decis˜ao humana (dezenas de segundos, horas ou dias) para executar a pr´oxima operac¸˜ao. 4.1

Plajenamento do Algoritmo Mesmo com o prec¸o mais acess´ıvel, o computador ´e comprado para diversas finalidades.

Desta forma ele tem que ser flex´ıvel, e flexibilidade quer dizer que o computador tenha formas de resolver cada problema levado a ele. Para que isto acontec¸a ´e necess´ario ter um planejamento das operac¸o˜es a serem executadas. Este planejamento deve acontecer antes mesmo de se utilizar o computador. Sendo assim, a utilizac¸˜ao de um computador para resolver um problema exige antes de tudo um algoritmo, ou seja, um conjunto de comandos que obedecidos “provocar˜ao uma sucess˜ao finita de ac¸o˜es que resultar˜ao na resoluc¸˜ao do problema proposto.” (FARRER et al., 1999, p. 19). 4.2

Previs˜ ao e Capacidade dos Primeiros Algoritmos Este algoritmo tem que ser transmitido ao computador e armazenado em sua mem´oria, para em seguida ser posto em execuc¸˜ao e conduzir o computador para a soluc¸˜ao desejada. O algoritmo deve, portanto, prever antecipadamente todas as situac¸˜oes que possam ocorrer quando for posto em execuc¸˜ao. (FARRER et al., 1999, p. 20).

Quando o problema ´e simples, ´e f´acil desenvolver um algoritmo para solucion´a-lo. No entanto, quando o problema ´e complexo necessita-se de t´ecnicas especiais para desenvolvˆe-lo. Na d´ecada de 50, quandos os computadores comec¸aram a ser fabricados em escala industrial, eles ainda eram m´aquinas bastante lentas e com pouca

23


capacidade de mem´oria. O porte dos problemas que podiam ser processados nestes computadores era muito limitado. (FARRER et al., 1999, p. 20)

4.3

Consequˆ encia da Evolu¸c˜ ao das Tecnologias na Eletrˆ onica Atrav´es do desenvolvimento de tecnologias na eletrˆonica, a velocidade, a mem´oria e as

potencialidades do computador cresceram exponencialmente. J´a se tem feito a comparac¸˜ao de que se a ind´ ustria automobil´ıstica tivesse evolu´ıdo de forma equivalente aos computadores, qualquer autom´ovel nacional custaria hoje menos de um dolar, faria um milh˜ao de quilˆometros com um litro de gasolina e poderia desenvolver a velocidade de cem milh˜ oes de ometros por hora (FARRER et al., 1999, p. 20). quilˆ

4.4

Desenvolvimento Estruturado Com esta evoluc¸˜ao, tamb´em aumentou-se o porte e a complexidade dos problemas

levados ao computador. Alguns algoritmos s˜ao muito complexos e outros ainda nem foram desenvolvidos pelo ser humano. Devido a esta complexidade e volume de problemas surgiu as t´ecnicas de desenvolvimento estruturado de algoritmos. Os objetivos destas t´ecnicas s˜ao (FARRER et al., 1999, p. 20): 1. facilitar o desenvolvimento dos algoritmos; 2. facilitar o entendimento pelos seres humanos; 3. antecipar a comprovac¸˜ao da sua correc¸˜ao; 4. facilitar a sua manutenc¸˜ao e a sua modificac¸˜ao; 5. permitir que o seu desenvolvimento possa ser empreendido simultaneamente por uma equipe de pessoas. Deste modo recomenda-se que os algoritmos sejam desenvolvidos por refinamentos sucessivos. Tamb´em chamado de “construc¸˜ao hier´arquica de algoritmos” e “desenvolvimento de cima para baixo” (em inglˆes, top-down) (FARRER et al., 1999, p. 20). E, tamb´em, que os sucessivos refinamentos s˜ao m´odulos, que delimitam poucas func¸˜oes e s˜ao o mais independente poss´ıvel, isto ´e, conservam poucos v´ınculos com os outros m´odulos. Apenas as recomendac¸o˜es do desenvolvimento estruturado n˜ao atingem os objetivos. O programador deve buscar simplicidade e clareza. 24


Utilizando estas recomendac¸˜oes consegue-se uma abordagem segura e objetiva do problema, a integrac¸˜ao dos m´odulos torna-se melhor. a alterac¸˜ao dos m´odulos j´a desenvolvidos ´e teoricamente desnecess´aria, os m´odulos de mais alto n´ıvel podem ser testados antes do desenvolvimento dos m´odulos de mais baixo n´ıvel. Al´em disso, contorna-se a limitac¸˜ao humana do entendimento da complexidade geral de um problema. Cada m´odulo pode ser desenvolvido de forma quase independente, logo cada m´odulo pode ser desenvolvido por uma pessoa. Estes benef´ıcios s˜ao important´ıssimos quando se faz a manutenc¸˜ao (melhora, correc¸˜ao e aperfeic¸oamento) e modificac¸˜ao (atender novas aplicac¸˜oes) do algoritmo. 4.5

Diagrama de Blocos Recomenda-se que algoritmos mais complexos bem documentados e se poss´ıvel ilustra-

dos. Para ficar mais f´acil o entendimento dos algoritmos costuma-se criar diagramas de blocos para ilustr´a-los como apresentado na Figura 18.

25


Figura 18 – Diagrama de Blocos do algoritmo de escrita da sequˆencia de Fibonacci menores que L.

4.6

Exerc´ıcios

1. Quais os motivos que levaram a criac¸˜ao do computador? 2. Quais os objetivos do desenvolvimento estruturado? 3. Quais as recomendac¸o˜es do desenvolvimento estruturado? 4. Quais as vantagens do desenvolvimento estruturado? 5. No diagrama de blocos existem v´arias represetac¸˜oes para os comandos, como retˆangulos, paralelep´ıpedos e losanglos. Busque na Internet ou em Livros o significado de cada um deles. 6. Quais os principais paradigmas de programac¸˜ao existentes?

26


7. Quais as caracter´ısticas da programac¸˜ao estruturada? 8. Qual o principal paradigma de programac¸˜ao usado atualmente?

27


˜ LINGUAGENS DE PROGRAMAC ¸ AO

5

Os algoritmos devem ser programados em uma linguagem de computador para que possam comandar as operac¸˜oes do computador. Programar um algoritmo ´e transcrevˆe-lo para uma linguagem que o computador entenda diretamente ou indiretamente. Os computadores s´o podem executar diretamente c´odigos em linguagem de m´aquina. A linguagem de m´aquina ´e capaz de lidar diretamente com os componentes eletrˆonicos do computador, sendo que ´e espec´ıfica para cada tipo de computador e arquitetura, s˜ao caracterizadas por serem dif´ıceis de entender por serem extremamente rudimentar e exigem que at´e mesmo as operac¸˜oes mais simples sejam refinadas e expressas em termos de registros, acumuladores e outros dispositivos de m´aquina. Al´em disso ´e expressa em forma bin´aria ou hexadecimal o que dificulta ainda mais o entendimento, e exige um cuidado para o posicionamento dos dados e das instruc¸˜oes na mem´oria (FARRER et al., 1999, p. 22). 5.1

Mais Antigas

5.1.1 Fortran Surgiu em 1957 e criada pela IBM, significa: IBM Mathematical FORmula TRANslation System. Foi a primeira linguagem criada que teve aceitac¸˜ao mundial. C´odigo 5.1 – Linguagem Fortran 90. Nota-se que este programa j´a foi escrito usando a vers˜ao melhorada da linguagem. 1

program FibMenorL

2

i m p l i c i t none

3

integer

: : L , A, B, C,

ierr

4 5

! Receba L

6

w r i t e ( ∗ , ∗ ) ” D i g i t e o v a l o r de L : ”

7

r e a d ( ∗ , ∗ , i o s t a t= i e r r ) L

8 9

! Processe os d o i s p r i m e i r o s termos

10

A = 1

11

i f (A < L ) w r i t e ( ∗ , ∗ ) A

12

B = 1

13

i f (B < L ) w r i t e ( ∗ , ∗ ) B

14 15

! Processe os termos r e s t a n t e s

16

C = A + B

17

do w h i l e (C < L )

18

write (∗ ,∗) C

28


19

A = B

20

B = C

21

C = A + B

22

enddo

23 24

end program FibMenorL

O C´odigo 5.1 deve ser salvo com o nome fib menor L.f90, para compilar o arquivo no Linux deve-se usar o comando: gfortran fib menor L.f90 -o fib menor L.bin. Se a compilac¸˜ao ocorreu sem erros, o arquivo em c´odigo de m´aquina ser´a gerado, sendo poss´ıvel execut´a-lo com o comando ./fib menor L.bin. 5.1.2 Cobol Surgiu em 1960 e criada por Grace Hopper, William Selden, Gertrude Tierney, Howard Bromberg, Howard Discount, Vernon Reeves e Jean E. Sammet para desenvolver aplicativos comerciais, financeiros e administrativos, seu nome significa: COmmon Business Oriented Language. (a) Grace Hopper (b) Jean E. Sammet

C´odigo 5.2 – Linguagem Cobol (Cuidado com os espac¸os a esquerda). 1

IDENTIFICATION DIVISION .

2

PROGRAM−ID . FIBONACCI .

3

ENVIRONMENT DIVISION .

4

DATA DIVISION .

5

WORKING−STORAGE SECTION .

6

01

L

PIC 9 ( 1 2 ) VALUE 0 .

7

01

A

PIC 9 ( 1 2 ) VALUE 0 .

8

01

B

PIC 9 ( 1 2 ) VALUE 0 .

9

01

C

PIC 9 ( 1 2 ) VALUE 0 .

10 11 12

PROCEDURE DIVISION . ∗ Receba L DISPLAY ” D i g i t e o v a l o r de L : ” .

29


13

ACCEPT L .

14 ∗ Processe os d o i s p r i m e i r o s termos

15 16

COMPUTE A = 1 .

17

I F A < L , DISPLAY A .

18

COMPUTE B = 1 .

19

I F B < L , DISPLAY B .

20 ∗ Processe os termos r e s t a n t e s

21 22

COMPUTE C = A + B .

23

PERFORM UNTIL C >= L

24

DISPLAY C

25

COMPUTE A = B

26

COMPUTE B = C

27

COMPUTE C = A + B

28 29

END−PERFORM

STOP RUN .

O C´odigo 5.2 deve ser salvo com o nome fib menor L.cob. Para compil´a-lo no Linux deve-se usar o comando cobc -x fib menor L.cob -o fib menor L.bin. A execuc¸˜ao se d´a da mesma forma uma vez que trata-se de um arquivo bin´ario ./fib menor L.bin. 5.1.3 Basic Criada por John G. Kemeny e Thomas E. Kurtz em 1964 para ser mais simples que o Fortran e para fins did´aticos, seu nome significa Beginner’s All-purpose Symbolic Instruction Code. Para codific´a-la no Linux deve-se utilizar o programa Basic256 que possui func¸˜oes pr´oprias para execuc¸˜ao. (a) John George meny.

Ke-

(b) Thomas Kurtz.

Eugene

C´odigo 5.3 – Linguagem Basic. 1

REM Receba L

30


2

p r i n t ” D i g i t e o v a l o r de L : ”

3

input L

4 5

REM P r o c e s s e o s d o i s p r i m e i r o s t e r m o s

6

A = 1

7

i f A < L then p r i n t A

8

B = 1

9

i f B < L then p r i n t B

10 11

REM P r o c e s s e o s t e r m o s r e s t a n t e s

12

C = A + B

13

while C < L

14

print C

15

A = B

16

B = C

17

C = A + B

18

end w h i l e

5.2

Mais Recentes

5.2.1 Pascal Criada por Niklaus Wirth em 1970 para ensinar programac¸˜ao estruturada e utilizar na sua f´abrica de software. Durante muito tempo foi a escolha na maioria das universidades para ensino de linguagem de programac¸˜ao. (a) Niklaus 1969.

Wirth

em (b) Niklaus Wirth mais recente.

C´odigo 5.4 – Linguagem Pascal 1

program FibMenorL ;

2

var

3

L , A, B, C: i n t e g e r ;

31


4

begin { Receba L}

5 6

w r i t e ( ’ D i g i t e o v a l o r de L :

7

readln (L) ;

’);

8 { Processe os d o i s p r i m e i r o s termos }

9 10

A := 1 ;

11

i f (A < L ) t h e n w r i t e l n (A) ;

12

B := 1 ;

13

i f (B < L ) t h e n w r i t e l n (B) ;

14 15

{ Processe os termos r e s t a n t e s }

16

C := A + B ;

17

w h i l e (C < L ) do b e g i n

18

w r i t e l n (C) ;

19

A := B ;

20

B := C ;

21

C := A + B ;

22 23

end ; end .

O C´odigo 5.4 deve ser salvo com o nome fib menor L.pas. Para compil´a-lo deve-se utilizar o comando fpc fib menor L.pas. A execuc¸˜ao do c´odigo bin´ario ´e identica ./fib menor L, exceto que o arquivo gerado n˜ao possui extens˜ao. 5.2.2 C Criada por Dennis Ritchie em 1972 para desenvolver o sistema operacional Unix. Uma das mais populares linguagens de programac¸˜ao, possui um compilador para quase todas as arquiteturas. (a) Ken Thompson (criador linguagem B) e Dennis Ritchie.

(b) Dennis Ritchie em 1998.

C´odigo 5.5 – Linguagem C 32


1

#i n c l u d e <s t d i o . h>

2 3

i n t main ( ) {

4

i n t L , A, B, C;

5

// Receba L

6

p r i n t f ( ” D i g i t e o v a l o r de L : ” ) ;

7

s c a n f ( ”%d ” , &L ) ;

8

// P r o c e s s e o s d o i s p r i m e i r o s t e r m o s

9

A = 1;

10

i f (A < L ) p r i n t f ( ”%d\n ” , A) ;

11

B = 1;

12

i f (B < L ) p r i n t f ( ”%d\n ” , B) ;

13 14

// P r o c e s s e o s t e r m o s r e s t a n t e s

15

C = A + B;

16

w h i l e (C < L ) {

17

p r i n t f ( ”%d\n ” , C) ;

18

A = B;

19

B = C;

20

C = A + B; }

21 22 23 24

return 0; }

O C´odigo 5.5 deve ser salvo com o nome fib menor L.c. A compilac¸˜ao ´e feita com o comando gcc fib menor L.c -o fib menor L.bin. E a execuc¸˜ao ./fib menor L.bin. 5.2.3 C++ Criada por Bjarne Stroustrup em 1985 para adicionar o conceito de classes na linguagem C. Posteriormente foi-se adicionado os conceitos de func¸˜oes virtuais, sobrecarga de operadores, heranc¸a m´ultipla, gabaritos e tratamento de excec¸o˜es. (a) Bjarne Stroustrup mais novo.

(b) Bjarne Stroustrup mais recente.

33


C´odigo 5.6 – Linguagem C++ 1

#i n c l u d e <i o s t r e a m >

2

u s i n g namespace s t d ;

3 4

i n t main ( ) {

5

i n t L , A, B, C;

6 7

// Receba L

8

c o u t << ” D i g i t e o v a l o r de L : ” ;

9

c i n >> L ;

10 11

// P r o c e s s e o s d o i s p r i m e i r o s t e r m o s

12

A = 1;

13

i f (A < L ) c o u t << A << ” \n ” ;

14

B = 1;

15

i f (B < L ) c o u t << B << ” \n ” ;

16 17

// P r o c e s s e o s t e r m o s r e s t a n t e s

18

C = A + B;

19

w h i l e (C < L ) {

20

c o u t << C << ” \n ” ;

21

A = B;

22

B = C;

23

C = A + B; }

24 25 26 27

return 0; }

O C´odigo 5.6 deve ser salvo com o nome fib menor L.cpp. Para compil´a-lo deve-se usar o comando: g++ fib menor L.cpp -o fib menor L.bin. A execuc¸˜ao se d´a com o comando: ./fib menor L.bin. 5.2.4 Perl Criada por Larry Wall em 1987 ´e muito usada em aplicac¸˜oes de miss˜ao cr´ıtica e para desenvolvimento Web.

34


Figura 24 – Larry Wall

C´odigo 5.7 – Linguagem Perl 1 #Receba L 2

p r i n t ” D i g i t e o v a l o r de L : ” ;

3

$ l = <STDIN>;

4 5 #P r o c e s s e o s d o i s

p r i m e i r o s termos

6

$a = 1 ;

7

i f ( $a < $ l ) { p r i n t ” $a \n ” ; }

8 9 10

$b = 1 ; i f ( $b < $ l ) { p r i n t ” $b \n ” ; }

11 12 #P r o c e s s e o s t e r m o s 13

$c = $a + $b ;

14

w h i l e ( $c < $ l ) {

restantes

p r i n t ” $c \n ” ;

15 16

$a = $b ;

17

$b = $c ;

18

$c = $a + $b ;

19

}

O C´odigo 5.7 deve-ser salvo com o nome fib menor L.pl. Por se tratar de uma linguagem interpretada apenas ´e necess´ario um comando para execuc¸˜ao: perl fib menor L.pl. 5.2.5 Python Criada por Guido van Rossum em 1991 “projetada com a filosofia de enfatizar a importˆancia do esforc¸o do programador sobre o esforc¸o computacional. Prioriza a legibilidade do ´ c´odigo sobre a velocidade ou expressividade” (WIKIPEDIA, 2012).

35


(a) Guido van Rossum em 2006.

(b) Guido van Rossum em 2008.

C´odigo 5.8 – Linguagem Python (cuidado com as tabulac¸˜oes). 1 #Receba L 2

l = i n t ( r a w i n p u t ( ” D i g i t e o v a l o r de L : ” ) )

3 4 #P r o c e s s e o s d o i s

p r i m e i r o s termos

5

a = 1

6

i f (a < l ) : print a

7 8

b = 1

9

i f (b < l ) : print b

10 11 #P r o c e s s e o s t e r m o s 12

c = a + b

13

while c < l : print c

14 15

a = b

16

b = c

17

restantes

c = a + b

O C´odigo 5.8 deve ser salvo com o nome fib menor L.py. Tamb´em ´e uma linguagem interpretada assim como o Perl, portanto para execuc¸˜ao basta o comando python fib menor L.py. 5.2.6 PHP (Hypertext Preprocessor) Criada por Rasmus Lerdorf surgiu em 1995 para substituir um conjunto de scripts em Perl.

36


(a) Rasmus Lerdorf em 2002.

(b) Rasmus Lerdorf em 2007.

C´odigo 5.9 – Linguagem PHP 1

<?php

2 3

// Receba L

4

$ l = $ REQUEST [ ”L” ] ;

5 6

// P r o c e s s e o s d o i s p r i m e i r o s t e r m o s

7

$a = 1 ;

8

i f ( $a < $ l ) { e c h o ” $a<b r />” ; }

9 10

$b = 1 ;

11

i f ( $b < $ l ) { e c h o ” $b<b r />” ; }

12 13

// P r o c e s s e o s t e r m o s r e s t a n t e s

14

$c = $a + $b ;

15

w h i l e ( $c < $ l ) {

16

e c h o ” $c<b r />” ;

17

$a = $b ;

18

$b = $c ;

19 20

$c = $a + $b ; }

21 22

?>

5.2.7 Ruby Criada por Yukihiro Matsumoto em 1995 para ser uma linguagem mais poderosa do que Perl e mais orientada a objetos do que Python.

37


(a) Yukihiro Matsumoto em 2007. (b) Yukihiro Matsumoto em 2009.

C´odigo 5.10 – Linguagem Ruby 1

#Receba L

2

p r i n t ” D i g i t e o v a l o r de L : ”

3

l = gets . t o i

4 5

#P r o c e s s e o s d o i s p r i m e i r o s t e r m o s

6

a = 1

7

i f (a < l )

8 9

puts a end

10

b = 1

11

i f (b < l )

12 13

puts b end

14 15

#P r o c e s s e o s t e r m o s r e s t a n t e s

16

c = a + b

17

w h i l e c < l do

18

puts c

19

a = b

20

b = c

21 22

c = a + b end

O C´odigo 5.10 deve ser salvo com o nome fib menor L.rb. Por tamb´em ser uma linguagem interpretada a execuc¸˜ao ´e feita com o comando: ruby fib menor L.rb. 5.2.8 Java Criada por James Gosling e Sun Microsystems em 1995 seu o objetivo n˜ao era uma nova linguagem, mas sim, antecipar e projetar a “pr´oxima” onda do mundo digital.

38


(a) James Gosling mais antiga.

(b) James Gosling em 2008.

C´odigo 5.11 – Linguagem Java 1

import java . u t i l . ∗ ;

2 3

c l a s s FibMenorL {

4

public

5

s t a t i c v o i d main ( S t r i n g [ ]

args ){

i n t L , A, B, C;

6 7

// Receba L

8

S c a n n e r l e i t o r = new S c a n n e r ( System . i n ) ;

9

System . o u t . p r i n t ( ” D i g i t e o v a l o r de L : ” ) ;

10

L = l e i t o r . nextInt () ;

11 12

// P r o c e s s e o s d o i s p r i m e i r o s t e r m o s

13

A = 1;

14

i f (A < L ) System . o u t . p r i n t l n (A) ;

15

B = 1;

16

i f (B < L ) System . o u t . p r i n t l n (B) ;

17 18

// P r o c e s s e o s t e r m o s r e s t a n t e s

19

C = A + B;

20

w h i l e (C < L ) {

21

System . o u t . p r i n t l n (C) ;

22

A = B;

23

B = C;

24

C = A + B; }

25 }

26 27

}

O C´odigo 5.11 deve ser salvo com o nome FibMenorL.java. Deve-se compilar o c´odigo para bytecode com o comando javac FibMenorL.java. E a execuc¸˜ao ´e feita com o comando java FibMenorL. Nota-se que n˜ao existe arquivo bin´ario sendo gerado, apenas o bytecode para que a M´aquina Virtual Java (JVM) o interprete.

39


5.3

Scripts

5.3.1 Shell Script Trata-se de uma linguagem script de v´arios sistemas operacionais. Um interpretador de comandos para esta linguagem ´e o bash, usado nas distribuic¸˜oes do GNU/Linux. C´odigo 5.12 – Linguagem Shell Script 1

#! / b i n / b a s h

2 3

#Receba L

4

e c h o −n ” D i g i t e o v a l o r de L : ”

5

read l

6 7

#P r o c e s s e o s d o i s p r i m e i r o s t e r m o s

8

a=1

9

if

[ $a − l t

10 11

$l

] ; then

e c h o $a fi

12 13

b=1

14

if

[ $b − l t

15 16

$l

] ; then

e c h o $b fi

17 18

#P r o c e s s e o s t e r m o s r e s t a n t e s

19

c=$ ( ( $a + $b ) )

20

w h i l e [ $c − l t

21

] ; do

e c h o $c

22

a=$b

23

b=$c

24 25

$l

c=$ ( ( $a + $b ) ) done

O C´odigo 5.12 deve ser salvo com o nome fib menor L.sh. Para a execuc¸˜ao deve-se utilizar o comando sh fib menor L.sh. 5.3.2 JavaScript Criada por Brendan Eich em 1995 ´e a principal linguagem usada para programc¸˜ao do lado do cliente (client-side) em navegadores.

40


(a) Brendan Eich mais antiga. (b) Brendan Eich mais recente.

C´odigo 5.13 – Linguagem JavaScript 1 <html> 2

<head>

3

< s c r i p t t y p e=” t e x t / j a v a s c r i p t ”>

4

// Receba L

5

v a r L = p a r s e I n t ( prompt ( ’ D i g i t e o v a l o r de L :

’));

6 7

// P r o c e s s e o s d o i s p r i m e i r o s t e r m o s

8

var A = 1;

9

i f (A < L ) document . w r i t e (A + ”<b r />” ) ;

10

var B = 1

11

i f (B < L ) document . w r i t e (B + ”<b r />” ) ;

12 13

// P r o c e s s e o s t e r m o s r e s t a n t e s

14

var C = A + B;

15

w h i l e (C < L ) {

16

document . w r i t e (C + ”<b r />” ) ;

17

A = B;

18

B = C;

19

C = A + B;

20

}

21

</ s c r i p t >

22 23

</head> </html>

41


6 6.1

FUNDAMENTOS Constantes Uma constante ´e um valor fixo que n˜ao se modificar´a ao longo da execuc¸˜ao de um

programa. Ela pode ser um n´umero (como na Matem´atica), um valor l´ogico ou uma sequˆencia de caracteres. Conforme o tipo elas s˜ao classificadas como: n´umerica, l´ogica ou literal (FARRER et al., 1999, p. 29). 6.1.1 Num´ericas ´ feita usando-se a representac¸˜ao decimal, podendo ser um n´umero com ou sem parte E fracion´aria, como 55 e 78, 4. As vezes usa-se as constantes vindas da Matem´atica que possuem um valor num´erico e uma parte exponencial: 7, 8 × 104 . Al´em disso, as constantes podem ser positivas ou negativas. Para isto basta colocar o sinal. Caso ele esteja ausente, ela ser´a considerada positiva (conforme na Matem´atica). S˜ao exemplos de constantes com sinal: 15, +15 ou −15; 0, 456, −4, 7689, 5, 9 × 107 ; −7, 9 × 104 , 7, 9 × 10−4 ou −7, 9 × 10−4 ; e 103 , −103 ou −10−3 . 6.1.2 L´ogicas ´ um valor verdadeiro ou falso, estes s˜ao muito usados em proposi¸c˜ E oes l´ ogicas. 6.1.3 Literais Pode ser qualquer sequˆencia de caracteres (letras, d´ıgitos ou s´ımbolos especiais). Toda constante literal deve aparecer entre aspas (“) para n˜ao ser confundida com outro item do algoritmo. Exemplos: “Ronneesley Moura Teles”, “Ol´a Mundo”, “Mensagem ao presidente”, “12345”, “&BX123”, “07/03/1988” e “verdadeiro”. Quando um n´umero est´a entre aspas ele ´e considerado literal. Nota-se que “verdadeiro” ´e uma constante literal, enquanto apenas verdadeiro ´e uma constante l´ogica. A presenc¸a da aspas torna qualquer valor em constante literal.

42


6.2

Vari´ aveis Na Matem´atica, vari´avel ´e a “representac¸˜ao simb´olica dos elementos de um certo

conjunto” (FARRER et al., 1999, p. 30). Nos algoritmos, cada vari´avel ocupa uma posic¸˜ao de mem´oria, cuja o conte´udo pode variar durante a execuc¸˜ao de um programa. Mesmo podendo armazenar valores diferentes, ela s´o pode armazenar um valor a cada instante. As var´ıaveis s˜ao identificadas por um nome que tamb´em ´e chamado de identificador (FARRER et al., 1999, p. 30). Nos algoritmos as vari´aveis s˜ao comuns, como nas situac¸˜oes descritas: 1) equac¸˜ao do segundo grau (f (x) = a·x2 +b·x+c), os identificadores a, b e c podem representar posic¸˜oes na mem´oria para armazenar os coeficientes da equac¸˜ao; 2) MRU (Movimento Retil´ıneo Uniforme) na F´ısica: S = So + v · t, os identificadores S, So, v e t; e 3) MRUV (Movimento Retil´ıneo Uniformemente Variado) na F´ısica: S = So + v · t +

a·t2 , 2

os identificadores S, So, v, t e a.

6.2.1 Formac¸˜ao dos Identificadores A formac¸˜ao do nome de uma vari´avel deve respeitar algumas regras. Estas regras variam em cada linguagem de programac¸˜ao, no entanto, estas variac¸˜oes geralmente fazem apenas a inclus˜ao de alguns caracteres espec´ıficos como o sublinhado ( ) e o cifr˜ao ($). As regras gerais s˜ao: 1) formado por um ou mais caracteres; 2) o primeiro destes caracteres deve ser obrigatoriamente uma letra; 3) os seguintes podem ser letras ou d´ıgitos; 4) n˜ao ´e permitido o uso de caracteres especiais1 ; 5) um identificador n˜ao pode conter o caractere espac¸o; e 6) o identificador n˜ao pode ser uma palavra-chave2 . Recomenda-se que os identificadores sejam o mais significativos poss´ıvel. Esta caracter´ıstica ´e marcante, pois facilita a manutenc¸˜ao, embora n˜ao seja uma regra, ´e importante respeit´a-la. A seguir alguns identificadores permitidos: C, N OT A, M AT RICU LA, IN SCRICAO, M EDIA, F IG10. N˜ao permitidos seriam: 5K, A(45), X : O, K ∗ 5, A − B. 6.2.2 Declarac¸˜ao Assim como as constantes as vari´aveis s˜ao classificadas como num´ericas, l´ogicas e literais. Al´em disto elas s´o podem armazenar valores de seu tipo de dado (FARRER et al., 1 2

Considera-se caractere especial aqueles que n˜ao s˜ao letras ou n´ umeros, ex: [, ], ), (, , %, etc. Palavras-chave s˜ao aquelas reservadas para func¸˜oes espec´ıficas como declarac¸˜ao de vari´aveis, func¸˜ oes, estruturas condicionais e repetic¸˜ao, tais como: declare, num´ erico, enquanto, se, etc.

43


1999, p. 31). Isto quer dizer que, vari´aveis num´ericas s´o podem armazenar n´umeros, l´ogicas s´o podem armazenar os valores verdadeiro ou falso, e literais s´o podem armazenar cadeias de caracteres. Caso esta regra seja desrespeitada, o compilador ou interpretador ir´a acusar um erro3 . A Figura 30 esclarece a relac¸˜ao entre os valores e as vari´aveis. Os valores s˜ao as pec¸as encaix´aveis, as vari´aveis, por sua vez, s˜ao os furos no cubo. O cubo representa a mem´oria RAM do computador. Assim, na situac¸˜ao da crianc¸a, que est´a com a bola na m˜ao, s´o ´e poss´ıvel encaixar este valor no espac¸o circular que ´e a vari´avel. Tentar encaixar a bola em qualquer outro lugar resulta em um erro. Figura 30 – Crianc¸a encaixando as pec¸as no brinquedo e os tipos de vari´aveis. Fonte: www.eunascinoviladaserra.com.br.

Para indicar o tipo de uma ou mais vari´aveis ´e feita a declarac¸˜ao de vari´aveis. No mesmo momento da declarac¸˜ao ´e escolhido o nome ou identificador da vari´avel. Uma vez declarada, qualquer referˆencia ao “seu identificador implica a referˆencia ao conte´udo do local de mem´oria representado pelo mesmo” (FARRER et al., 1999, p. 31). O Algoritmo 7 apresenta a forma geral de declarac¸˜ao de vari´aveis. Algoritmo 7: Forma geral de declarac¸˜oes de vari´aveis 1 3

declare lista-de-identificadores nome-do-tipo

Hoje os erros s˜ao chamados comumente de bug.

44


O Algoritmo 8 apresenta a declarac¸˜ao de oito vari´aveis em trˆes diferentes comandos de declarac¸˜ao. Nota-se que ´e necess´ario um comando para cada tipo de vari´avel. Algoritmo 8: Exemplos de declarac¸˜oes de vari´aveis 1

declare NOTA, CODIGO, MATRICULA num´ erico

2

declare TESTE, SIM l´ ogico

3

declare NOME, ENDERECO, SOBRENOME literal

6.3

Coment´ arios ´ um texto ou O coment´ario ´e um instrumento para melhorar a clareza do algoritmo. E

apenas uma frase que aparece sempre entre chaves ({coment´ario}) 4 . Eles podem ser colocados em qualquer ponto do algoritmo que se fac¸a necess´ario. O Algoritmo 9 apresenta a declarac¸˜ao de seis vari´aveis, cada uma com um coment´ario. Nota-se que os identificadores n˜ao foram representativos, portanto o programador optou por colocar coment´arios para aumentar a clareza. Esta situac¸˜ao era corriqueira em linguagens de programac¸˜ao antigas que permitiam no m´aximo oito caracteres para um identificador. Algoritmo 9: Exemplos de coment´arios 1

declare MAT, {N´umero de matr´ıcula do aluno}

2

NOTA, {Total de pontos obtidos no semestre letivo}

3

COD {C´odigo do curso do aluno}

4

num´ erico

5

declare NOM, {Nome do aluno}

6

END, {Enderec¸o do aluno}

7

C {Conceito final}

8

literal

6.4

Express˜ oes aritm´ eticas “Denomina-se express˜ao aritm´etica aquela cujos operadores s˜ao aritm´eticos e cuja os

operandos s˜ao constantes e/ou vari´aveis do tipo num´erico.” (FARRER et al., 1999, p. 32). Os operadores artim´eticos s˜ao: adic¸˜ao, subtrac¸˜ao, multiplicac¸˜ao, divis˜ao, potenciac¸˜ao e radiciac¸˜ao. A seguir alguns exemplos de express˜oes aritm´eticas: • X + Y , X − Y e 2 × N OT A; 4

A grande maioria das linguagens de programac¸˜ao utilizam o coment´ario com a marcac¸˜ao //.

45


• T OT AL/N , •

P e SOM A2 ;

F I + G2 − H, A × B + C e

T OT M

+ K x;

As express˜oes aritm´eticas usadas nos algoritmos utilizam a mesma notac¸˜ao da Matem´atica, por´em n˜ao ´e permitido omitir o operador de multiplicac¸˜ao. Por exemplo na express˜ao AB + C, n˜ao seria poss´ıvel saber se AB ´e o identificador de uma vari´avel ou A e B s˜ao duas vari´aveis distintas e AB quer dizer a multiplicac¸˜ao de A por B. Para evitar esse problema usa-se a forma A × B + C. As operac¸o˜es possuem prioridade igual a da Matem´atica (Tabela 2). Tabela 2 – Prioridade Matem´atica das express˜oes aritm´eticas. Prioridade 1 2 3

6.5

Opera¸c˜ ao Potenciac¸˜ao e Radiac¸˜ao Multiplicac¸˜ao e Divis˜ao Adic¸˜ao e Subtrac¸˜ao

Express˜ oes l´ ogicas ´ comum nos algoritmos surgirem situac¸˜oes em que a execuc¸˜ao de uma E ac¸˜ao, ou sequˆencia de subac¸˜oes, est´a sujeita a uma certa condic¸˜ao. Esta condic¸˜ao ´e representada no texto do algoritmo por meio de uma express˜ao l´ ogica. [...] Denomina-se express˜ao l´ogica a express˜ao cujos os operadores s˜ao l´ ogicos e cujos operandos s`ao relac¸˜oes, constantes e/ou vari´aveis do tipo l´ ogico. (FARRER et al., 1999, p. 35)

6.5.1 Relac¸˜oes Uma express˜ao relacional ´e uma comparac¸˜ao de dois valores de um mesmo tipo b´asico. Estes valores s˜ao representados nas relac¸˜oes atrav´es de constantes, vari´aveis ou express˜oes aritm´eticas. Os operadores relacionais indicam a comparac¸˜ao a ser realizada entre os termos da relac¸˜ao: = igual a, 6= diferente de, > maior que, < menor que, ≥ maior ou igual a, e ≤ menor ou igual a. O resultado obtido de uma relac¸˜ao ´e sempre um valor l´ogico, ou seja, verdadeiro ou falso. Ao analisar uma relac¸˜ao, como X + Y = Z, o resultado s´o poder´a ser verdadeiro ou falso. Isto depender´a dos valores atribu´ıdos as trˆes vari´aveis, ou seja, conforme o resultado da express˜ao aritm´etica X + Y seja igual ou diferente do conte´udo da vari´avel Z. A Tabela 3 apresenta alguns exemplos de relac¸o˜es. 46


Tabela 3 – Exemplo de relac¸o˜es. X

Y

Z

Vari´ aveis COR

1 4 1 1

2 3 1 2

5 1 2 1

“AZUL” “VERDE” “BRANCO” “AZUL”

2

NOME

X +Y >Z

“PAULO” ´ “JOSE” “PEDRO” ´ “JOSE”

falso verdadeiro falso verdadeiro

Rela¸c˜ oes COR = “AZUL” verdadeiro falso falso verdadeiro

N OM E 6= ´ “JOSE” verdadeiro falso verdadeiro falso

6.5.2 Operadores l´ogicos “A Algebra das Proposic¸˜oes define trˆes conectivos usados na formac¸˜ao de novas proposic¸˜oes a partir de outras j´a conhecidas.” (FARRER et al., 1999, p. 36). Estes conectivos s˜ao os operadores nas express˜oes l´ogicas: e (conjunc¸˜ao), ou (disjunc¸˜ao), e n˜ ao (negac¸˜ao). Nos algoritmos ser˜ao consideradas preposic¸˜oes como sendo vari´aveis l´ogicas, uma relac¸˜ao ou uma express˜ao l´ogica composta. 6.5.2.1 Conjunc¸˜ao Duas preposic¸˜oes podem ser combinadas pelo conectivo e para formar uma preposic¸˜ao chamada conjun¸c˜ ao das preposic¸o˜es originais. A conjunc¸˜ao das preposic¸˜oes p e q representase por: p ∧ q lˆe-se p e q. A conjunc¸˜ao de duas preposic¸˜oes ´e verdadeira se e somente se ambas as preposic¸o˜es s˜ao verdadeiras (FARRER et al., 1999, p. 36). Falar que “a conjunc¸˜ao de duas preposic¸˜oes ´e verdadeira se e somente se ambas as preposic¸˜oes s˜ao verdadeiras” n˜ao parece muito matem´atico, por isto, existe um meio mais simples de an´alise e mais exato. Este meio se chama tabela verdade. A Tabela 4 apresenta a tabela verdade de uma conjunc¸˜ao. Tabela 4 – Tabela verdade da conjunc¸˜ao. V significa verdadeiro e F falso. p V V F F

q V F V F

p∧q V F F F

47


6.5.2.2 Disjunc¸˜ao Duas preposic¸o˜es quaisquer podem ser combinadas pelo conectivo ou (com sentido de e/ou) para formar uma preposic¸˜ao que ´e chamada disjunc¸˜ao das preposic¸˜oes originais. A disjunc¸˜ao de duas preposic¸˜oes p e q ´e designada por: p ∨ q que ´e lida como p ou q A disjunc¸˜ao de duas preposic¸o˜es ´e verdadeira se e somente se, pelo menos, uma delas for verdadeira. (FARRER et al., 1999, p. 37). A Tabela 5 apresenta a tabela verdade de uma disjunc¸˜ao. Tabela 5 – Tabela verdade da disjunc¸˜ao. V significa verdadeiro e F falso. p V V F F

q V F V F

p∨q V V V F

6.5.2.3 Negac¸˜ao Dada uma proposic¸˜ao p qualquer, um outra proposic¸˜ao, chamada negac¸˜ao de p, pode ´ falso que” antes de p ou, se poss´ıvel, inserindo a palavra “n˜ao” ser formada escrevendo-se “E em p. Simbolicamente, designa-se a negac¸˜ao de p por ¬p. Se p ´e verdadeira ent˜ao ¬p ´e falsa, se p ´e falsa ent˜ao ¬p ´e verdadeira (FARRER et al., 1999, p. 37). A Tabela 6 apresenta a tabela verdade para a negac¸˜ao. Tabela 6 – Tabela verdade da negac¸˜ao. V significa verdadeiro e F falso. p V F

¬p F V

6.5.3 Prioridade As express˜oes l´ogicas podem conter mais de um operador l´ogico na mesma express˜ao, por exemplo: n˜ao SIM e QU OCIEN T E(Z, Y ) + 1 = X; ou N OM E = ”JORGE” e SIM ou X 2 < Z + 10. Em alguns casos, a ordem em que as express˜oes l´ogicas s˜ao efetudas altera o resultado final. Isto tamb´em acontece na Matem´atica, por exemplo 3 + 2 × 5, se a soma for 48


efetuada primeiro o resultado ´e 25, mas se a multiplicac¸˜ao for efetuada primeiro o resultado ´e apenas 13. Assim como na matem´atica as express˜oes l´ogicas tamb´em podem possuir parˆenteses para deixar claro a ´ordem das operac¸˜oes. A Tabela 7 apresenta a prioridade de todos os operadores conhecidos. Tabela 7 – Prioridade de todos os operadores conhecidos. Prioridade 1a 2a 3a 4a 5a

6.6

Operador aritm´etico relacional n˜ao e ou

Express˜ oes Literais “Uma express˜ao literal ´e aquela formada por operadores literais e operandos que s˜ao

constantes e/ou vari´aveis do tipo literal” (FARRER et al., 1999, p. 39). A formac¸˜ao de literais tem grande importˆancia no desenvolvimento de programas. No entanto grande parte destas operac¸˜oes variam a cada linguagem de programac¸˜ao. A principal operac¸˜ao entre literais ´e chamada de concatenac¸˜ao e seu operador ´e o s´ımbolo |, por exemplo: A|B. A concatenac¸˜ao “fornece como resultado um u´nico literal formado pelo conte´udo de A seguido do conte´udo de B” (FARRER et al., 1999, p. 39). Por exemplo se A cont´em o literal “BOA” e B cont´em o literal “NOITE”, o valor fornecido pela concatenac¸˜ao de A com B, ou seja, A|B ´e o literal “BOANOITE”. As outras operac¸˜oes envolvendo literais s˜ao fornecidas nas linguagens de programac¸˜ao como func¸˜oes, as principais s˜ao: o comprimento do literal (n´umero de caracteres); os n primeiros caracteres de um literal, onde n ´e um n´umero inteiro; os n u´ltimos caracteres de um literal, onde n ´e um n´umero inteiro (FARRER et al., 1999, p. 40). 6.7

Comando de Atribui¸c˜ ao Uma vez que um comando ´e “a descric¸˜ao de uma ac¸˜ao a ser executada em um dado

momento” (FARRER et al., 1999, p. 40). O comando de atribuic¸˜ao “permite que se fornec¸a um valor a uma certa vari´avel, onde a natureza deste valor tem de ser compat´ıvel com o tipo da vari´avel na qual est´a sendo armazenado” (FARRER et al., 1999, p. 40). 49


A forma geral de um comando de atribuic¸˜ao ´e identif icador ← express˜ao. Neste contexto identif icador ´e o nome da vari´avel a qual est´a sendo atribuido um valor, ← ´e o s´ımbolo de atribuic¸˜ao, e express˜ao pode ser uma express˜ao aritm´etica, express˜ao l´ogica ou express˜ao literal de cuja avaliac¸˜ao ´e obtido o valor a ser atribu´ıdo `a vari´avel. Dado que existem as vari´aveis a seguir: K, M EDIA, SOM A, N , X e Y de tipo num´erico, T EST E, COD e SIM de tipo l´ogico, COR de tipo literal A e B devem ser do mesmo tipo (l´ogico ou num´erico ou literal). A seguir alguns exemplos de comandos de atribuic¸˜ao:

6.8

• K ← 1;

• M EDIA ← SOM A/N ;

• COR ← ”V ERDE”;

• COD ← N 2 + 1 ≥ 5;

• T EST E ← falso;

• SIM ← X = 0 e Y 6= 2;

• A ← B;

• T OT AL ←

N + X2 + Y .

Comandos de entrada e sa´ıda “Sabe-se que as unidades de entrada e sa´ıda s˜ao dispositivos que possibilitam a comu-

nicac¸˜ao entre o usu´ario e o computador” (FARRER et al., 1999, p. 41). Atrav´es de um teclado o usu´ario consegue informar dados a um programa e consequentemente `a mem´oria principal. Em contrapartida, o computador consegue processar os dados e informar resultados para o usu´ario atrav´es do monitor ou, at´e mesmo, de uma impressora. ´ o programador que determina quando e como ser˜ao feitas entrada e sa´ıda de dados. E Os comandos de entrada e sa´ıda s˜ao ferramentas para estas finalidades. 6.8.1 Comando de entrada Um dos comandos de entrada ´e o “leia” que permite a leitura de dados atrav´es de um dispositivo de entrada. Sua forma geral ´e apresentada no Algoritmo 10, neste contexto leia ´e uma palavra-chave, lista-de-identificadores s˜ao os nomes das vari´aveis, separados por v´ırgula, nas quais ser˜ao armazenados os valores provenientes do meio de entrada. Algoritmo 10: Forma geral do comando leia 1

leia lista-de-identificadores

50


O Algoritmo 11 indica que dois valores num´ericos ser˜ao lidos de um dispositivo de entrada. Ap´os a leitura, estes valores ser˜ao armazenados nos conte´udos das vari´aveis. Algoritmo 11: Exemplo do comando de entrada “leia”. 1 2 3

Algoritmo leia NOTA, NUM fim algoritmo.

6.8.2 Comando de sa´ıda Um dos comandos de sa´ıda ´e o “escreva” que permite a escrita de dados em um dispositivo de sa´ıda. Sua forma geral ´e apresentada no Algoritmo 12, onde escreva ´e uma palavra-chave e lista-de-identificadores s˜ao os nomes das vari´aveis, separados por v´ırgula, cujos conte´udos ser˜ao mostrados ao usu´ario atrav´es de um meio de sa´ıda. Al´em dos conte´udos das vari´aveis, o valor de uma constante pode ser emitido diretamente. Algoritmo 12: Forma geral do comando escreva 1

escreva lista-de-identificadores e/ou constantes O Algoritmo 13 indica que trˆes valores ser˜ao escritos em um dispositivo de sa´ıda. Dos

trˆes valores, os dois primeiros s˜ao duas vari´aveis e o terceiro ´e uma constante. Algoritmo 13: Exemplo do comando de sa´ıda “escreva”. 1 2 3

6.9

Algoritmo escreva A, X, 35 fim algoritmo. Fun¸c˜ oes Pode-se usar nos algoritmos func¸o˜es existentes na Matem´atica (FARRER et al., 1999,

p. 33). A Tabela 8 apresenta func¸o˜es matem´aticas comuns usadas nos algoritmos.

51


Tabela 8 – Func¸o˜es Matem´aticas. EA, EAx e EAy – Express˜oes Aritm´eticas. Nome LOG(EA) LN (EA) EXP (EA) ABS(EA) T RU N CA(EA) ARREDON DA(EA) SIN AL(EA)

QU OCIEN T E(EAx, EAy) REST O(EAx, EAy)

6.10

Resultado Logaritmo na base 10 de EA Logaritmo neperiano de EA O n´umero e (base dos logaritmos neperianos) elevado a EA Valor absoluto de EA Parte inteira de um n´umero fracion´ario Transforma, por arredondamento, um n´umero fracion´ario em inteiro Fornece o valor -1, 1 ou zero conforme o valor de EA seja negativo, positivo ou igual a zero Quociente inteiro da divis˜ao de EAx por EAy Resto da divis˜ao de EAx por EAy

Exerc´ıcios

1. Identifique cada tipo de constante: a) 98;

c) ”falso”;

b) ”Barco”;

d) 3, 9 × 10− 9;

e) verdadeiro.

2. Escreva dois exemplos de cada tipo de constante (num´erica, l´ogica e literal). 3. Dado que as vari´aveis NOME, IDADE, CPF e SALARIO servem para armazenar respectivamente o nome do funcion´ario, sua idade, seu CPF (Cadastro de Pessoa F´ısica) e seu sal´ario. Declare corretamente estas vari´aveis. Lembre-se associ´a-las corretamente ao seu tipo de dado. 4. S˜ao identificadores v´alidos: a) VALOR

e) NOTA

i) NOMEDAEMPRESA

b) X2

f) SALARIO-LIQUIDO

j) AH!

c) 3 X 4

g) NOTA*DO*ALUNO

k) B248

d) XYZ

h) MARIA

l) A1B2C3 52


m) KM/H

n) SALA215

o) M(A)

5. Dados os valores para A = 10, B = 3, X = 2,5 e Y = 1,2 encontre o resultado das express˜oes: a) QUOCIENTE(A, B)

k) TRUNCA(B 2 + X)

b) RESTO(A, B)

l) TRUNCA(A/3 + 1)

c) QUOCIENTE(X, 2)

m) TRUNCA(X − 3, 2)

d) RESTO(X, 2)

n) ABS(A − B 3 )

e) SINAL(X + Y − A) o) ABS(A − B) 2

f) SINAL(A − B + Y ) p) EXP(Y × (B + 2) − 6)

g) SINAL(A − 4 × X) h) ARREDONDA(A − X)

√ q) EXP( A + 2 × B − B)

i) ARREDONDA(B + Y )

r) QUOCIENTE(B + Y , X + 1)

j) ARREDONDA(Y − X)

s) RESTO(B + Y , X + 1)

6. Sendo P, Q, R e S vari´aveis do tipo num´erico, cujos conte´udos s˜ao iguais a 2, 3, 12 e 4,5, respectivamente, quais os valores fornecidos por cada uma das express˜oes aritm´eticas abaixo? a) 100 × QU OCIEN T E(Q, P ) + R b) P × REST O(R, 5) −

Q 2

c) SIN AL(S − R) + EXP (Q2 − R4 × P − 3) √ d) R + P 2 + ARREDON DA(S) e) REST O(S, P + 1) − Q × R √ f) 1 + 5 P 3 + 2 × R − T RU N CA(S − 1) g) 1 + QU OCIEN T E(R + S, Q2 ) × SIN AL(2 × P × Q − R) h) P + ARREDON DA(2, 9 + T RU N CA(0, 3 + S) × 2) ˜ completar 7. Dadas as vari´aveis num´ericas A e B, as vari´aveis literais NOME e PROFISSAO, a Tabela 9, preenchendo os espac¸os em branco com os resultados l´ogicos (falso ou

53


verdadeiro) obtidos como resultados das relac¸˜oes, tendo em vista os valores atribu´ıdos a estas vari´aveis: Tabela 9 – Tabela a ser preenchida.

A

B

Vari´ aveis ˜ NOME PROFISSAO

3 5 2,5

16 64 9

”MIRIAM” ”PEDRO” ”ANA”

A+1≥

B

Rela¸c˜ oes N OM E 6= ”ANA”

˜ PROFISSAO = ´ ”MEDICO”

”ADVOGADO” ´ ”MEDICO” ”PROFESSOR”

8. Dadas as vari´aveis num´ericas X, Y e Z, contendo os valores 2, 5 e 9, respectivamente; a vari´avel literal NOME, contendo o literal “MARIA”; e a vari´avel l´ogica SIM, contendo o valor l´ogico falso, observar os resultados obtidos das express˜oes l´ogicas a seguir: a) X + Y > Z e N OM E = ”M ARIA” b) SIM ou Y ≥ X c) n˜ao SIM e QU OCIEN T E(Z, Y ) + 1 = X d) N OM E = ”JORGE” e SIM ou X 2 < Z + 10 9. Usando os dados da tabela abaixo e sabendo que a vari´avel TESTE tem o valor l´ogico falso, fac¸a o c´alculo das seguintes relac¸˜oes: R1) A + 1 ≥ R2) A + 1 ≥

√ √

B ou N OM E 6= ”AN A” ˜ 6= ”MEDICO” ´ B e PROFISSAO

˜ = ”MEDICO”e ´ R3) N OM E 6= ”AN A” ou PROFISSAO A+1≥

B

˜ = ”MEDICO”ou ´ R4) PROFISSAO T EST E √ ˜ = ”MEDICO”) ´ R5) n˜ao T EST E e (A + 1 ≥ B ou n˜ao PROFISSAO √ R6) n˜ao (A + 1 ≥ B e T EST E) Tabela 10 – Tabela a ser preenchida. F significa falso.

A 3 5 2,5

B 16 64 9

Vari´ aveis ˜ NOME PROFISSAO ”MIRIAM” ”ADVOGADO” ´ ”PEDRO” ”MEDICO” ”ANA” ”PROFESSOR”

TESTE F F F

R1

Rela¸c˜ oes R2 R3 R4 R5

R6

54


10. Considerando A, B e C vari´aveis num´ericas, contendo os valores, 1, 4,5 e 8, respectivamente; NOME e COR vari´aveis literais contendo as sequˆencias de caracteres ”TANIA”e ”BRANCO”e TESTE vari´avel l´ogica contendo o valor verdadeiro, determinar os resultados obtidos da avaliac¸˜ao das seguintes express˜oes l´ogicas: a) A = 1 e TESTE b) N OM E = ”P EDRO” ou COR 6= ”BRAN CO” c) n˜ao T EST E ou REST O(B, 2) = 0, 5 d) C < 10 ou T EST E e COR = ”P RET O” √ e) A2 + 3 C = 3 e (A − T RU N CA(B + C) > 13 ou N OM E = ”AN A”) f) T EST E e n˜ao T EST E 11. Dado que p ´e uma vari´avel l´ogica chamada OK, onde cujo conte´udo ´e verdadeiro; q ´e uma relac¸˜ao l´ogica A = 0, onde o valor de A ´e 3; r ´e uma vari´avel l´ogica chamada TESTE cujo conte´udo ´e falso; e s ´e uma relac¸˜ao l´ogica B 6= 1, onde o conte´udo de B ´e 2. Calcule as express˜oes a seguir: a) p ∧ s

b) p ∧ r

c) q ∧ s

d) q ∧ r

12. Dado que p ´e uma vari´avel l´ogica chamada OK cujo conte´udo ´e verdadeiro; q ´e uma relac¸˜ao l´ogica A = 0, onde o valor de A ´e 3; r ´e uma vari´avel l´ogica chamada T EST E cujo conte´udo ´e falso; s ´e uma relac¸˜ao l´ogica B 6= 1, onde o conte´udo de B ´e 2. a) p ∨ s

b) p ∨ r

c) q ∨ s

d) q ∨ r

13. Quais seriam os valores obtidos das express˜oes literais a seguir, supondo A, B e C vari´aveis literais contendo os valores ”BENS”, ”!”e ”PARA”, repectivamente? a) A|B|C

b) A|C|B

c) C|A|B

14. Sendo SOM A, N U M , X vari´aveis num´ericas, N OM E, COR, DIA vari´aveis literais e T EST E, COD, T U DO vari´aveis l´ogicas, assinalar os comandos de atribuic¸˜ao considerados inv´alidos:

55


a) N OM E ← 5

f) X ← X + 1

b) SOM A ← N U M + 2 × X

g) N U M ← ” ∗ ABC ∗ ”

c) T EST E ← COD ou X 2 6= SOM A

h) DIA ← ”SEGU N DA” √ i) SOM A + 2 ← X 2 − N U M

d) T U DO ← SOM A e) COR ← ”P RET O −

√ X

j) X ← N OM E ≥ COD

15. Quais os valores armazenados em SOMA, NOME e TUDO, supondo-se que NUM, X, COR, DIA, TESTE e COD valem, respectivamente, 5; 2,5; ”AZUL”; ”TERC ¸ A”: falso e verdadeiro? a) N OM E ← DIA b) SOM A ← N U M 2 /X + ARREDON DA(X + 1) c) T U DO ← n˜ao T EST E ou COD e SOM A < X 16. Interprete o Algoritmo 14, dadas as vari´aveis: N e P do tipo literal, X e A do tipo num´erico; e uma linha digitada com o conte´udo: MMAA

25

Algoritmo 14: Algoritmo a ser interpretado 1

X←0

2

leia N, A

3

X ←X +A

4

P ←N

5

escreva P, X

6

X ←X +A

7

escreva X

8

A←X

9

escreva N, X, A

56


7

CONTROLE DE FLUXO

7.1

Estrutura sequencial Num algoritmo aparecem em primeiro lugar as declarac¸˜oes seguidas por comandos que, se n˜ao houver indicac¸˜ao em contr´ario, dever˜ao ser executados em uma sequˆencia linear, seguindo-se o texto em que est˜ao escritos, de cima para baixo (FARRER et al., 1999, p. 44).

Algoritmo 15: Modelo de algoritmo. di representa i-´esima declarac¸˜ao e ci representa o i-´esimo comando. 1

Algoritmo

2

d1

3

d2

4

d3

5

.

6

.

7

.

8

dn

9

c1

10

c2

11

c3

12

.

13

.

14

.

15

cm

16

fim algoritmo. O Algoritmo 16 apresenta um exemplo de estrutura sequencial. Assim o algoritmo ´e

analisado de cima para baixo, primeiramente declarando as vari´aveis A, B e C (linha 1), em seguida fazendo a leitura das vari´aveis A e B (linha 2), executando o comando de atribuic¸˜ao

57


(linha 4) e, por fim, escrevendo os valores das vari´aveis (linha 5). Algoritmo 16: Exemplo da estrutura sequencial de um algoritmo. 1

Algoritmo

2

declare A, B, C num´ erico

3

leia A, B

4

C ← (A + B) × B

5

escreva A, B, C

6

7.2

fim algoritmo. Estrutura condicional A estrutura condicional permite a escolha do grupo de ac¸˜oes e estruturas a ser executado quando determinadas condic¸˜oes, representadas por express˜ oes l´ ogicas, s˜ao ou n˜ao satisfeitas (FARRER et al., 1999, p. 45).

7.2.1 Estrutura condicional simples O Algoritmo 17 apresenta a forma geral de uma estrutura condicional. Neste caso a sequˆencia de comandos s´o ser´a executada se a condic¸˜ao for verdadeira. Uma sequˆencia de comandos pode ter um ou mais comandos e pode conter uma ou mais estruturas. Algoritmo 17: Modelo da estrutura condicional simples. 1

se condic¸˜ao ent˜ ao sequˆencia de comandos

2 3

fim O Algoritmo 18 apresenta um exemplo de uso da estrutura condicional na linha 5 a 7.

Neste caso, se A + B < C ent˜ao ser´a escrita uma mensagem no dispositivo de sa´ıda padr˜ao. Algoritmo 18: Exemplo da estrutura condicional simples. 1

Algoritmo

2

declare A, B, C num´ erico

3

leia A, B, C

4

escreva A, B, C

5

se A + B < C ent˜ ao escreva ”MENSAGEM”

6 7 8

fim fim algoritmo.

58


7.2.2 Estrutura condicional composta O Algoritmo 19 apresenta a estrutura condicional composta possui a presenc¸a da palavra-chave sen˜ ao. Esta permite executar ac¸˜oes caso a condic¸˜ao seja falsa. Neste caso a sequˆencia A de comandos s´o ser´a executada se a condic¸˜ao for verdadeira. Caso a condic¸˜ao seja falsa, ou seja, sen˜ao for verdadeira, ser´a executada a sequˆencia B de comandos. Algoritmo 19: Modelo da estrutura condicional composta. 1

se condic¸˜ao ent˜ ao sequˆencia A de comandos

2 3

sen˜ ao sequˆencia B de comandos

4 5

fim O Algoritmo 20 apresenta um exemplo de estrutura condicional composta. Caso A = B

for falso, os comandos das linhas 9 e 10 ser˜ao executados. Algoritmo 20: Exemplo da estrutura condicional composta. 1

Algoritmo

2

declare A, B, X, Y num´ erico

3

leia A, B

4

escreva A, B, C

5

se A = B ent˜ ao

6

X ← 1, 5

7

Y ← 2, 5

8

sen˜ ao

9

X ← −1, 5

10

Y ← −2, 5

11

fim

12

escreva X, Y

13

7.3

fim algoritmo. Estrutura de repeti¸c˜ ao “Permite que uma sequˆencia de comandos seja executada repetidamente at´e que uma

determinada condic¸˜ao de interrupc¸˜ao seja satisfeita.” (FARRER et al., 1999). Esta condic¸˜ao de interrupc¸˜ao pode aparecer em trˆes momentos da estrutura de repetic¸˜ao: no in´ıcio, no meio ou 59


no fim. Esta posic¸˜ao apesar de inicialmente parecer irrelevante afeta a traduc¸˜ao do algoritmo para uma linguagem de programac¸˜ao. 7.3.1 Interrupc¸˜ao no in´ıcio O Algoritmo 21 apresenta uma estrutura de repetic¸˜ao com interrupc¸˜ao no in´ıcio. Nesta estrutura a sequˆencia B de comandos ser´a repetida at´e que a condic¸˜ao seja verdadeira. Quando isto ocorrer a repetic¸˜ao ser´a interrompida, devido a presenc¸a da palavra chave interrompa. Assim, a sequˆencia de comandos que vier logo ap´os a instruc¸˜ao fim repita ser´a executada. Algoritmo 21: Forma geral de uma estrutura de repetic¸˜ao com interrupc¸˜ao no in´ıcio. 1

repita

2

se condic¸˜ao ent˜ ao

3

interrompa

4

fim

5

Sequˆencia B de comandos

6

fim repita O Algoritmo 22 apresenta um exemplo de estrutura de repetic¸˜ao nas linhas 5 a 11. Este

calcula a soma dos n´umeros pares de 100 at´e 200, ele ´e interrompido quando P AR > 200, por fim escreve a soma na linha 12. Algoritmo 22: Soma os n´umeros pares desde 100 at´e 200 inclusive. 1

Algoritmo

2

declare PAR, SOMA num´ erico

3

SOM A ← 0

4

P AR ← 100

5

repita

6

se P AR > 200 ent˜ ao interrompa

7 8

fim

9

SOM A ← SOM A + P AR

10

P AR ← P AR + 2

11

fim repita

12

escreva SOMA

13

fim algoritmo.

60


7.3.2 Interrupc¸˜ao no meio O Algoritmo 23 apresenta a forma geral de uma estrutura de repetic¸˜ao com interrupc¸˜ao no meio. Nesta estrutura as sequˆencias A e B de comandos ser˜ao repetidas at´e que a condic¸˜ao seja verdadeira. Quando isto ocorrer a repetic¸˜ao ser´a interrompida. A sequˆencia de comandos que vier logo ap´os a instruc¸˜ao fim repita ser´a executada. Algoritmo 23: Forma geral de uma estrutura de repetic¸˜ao com interrupc¸˜ao no interior. 1

repita

2

Sequˆencia A de comandos

3

se condic¸˜ao ent˜ ao

4

interrompa

5

fim

6

Sequˆencia B de comandos

7

fim repita O Algoritmo 24 apresenta a mesma soma dos n´umeros pares de 100 a 200, por´em com

uma interrupc¸˜ao no meio da estrutura de repetic¸˜ao. Nota-se que na linha 4, a vari´avel P AR teve de ser inicializada com o valor 98, uma vez que a primeira conta realizada na estrutura de repetic¸˜ao ´e a soma do valor 2 a ela na linha 6. Algoritmo 24: Soma os n´umeros pares desde 100 at´e 200 inclusive. 1

Algoritmo

2

declare PAR, SOMA num´ erico

3

SOM A ← 0

4

P AR ← 98

5

repita

6

P AR ← P AR + 2

7

se P AR > 200 ent˜ ao interrompa

8 9 10

fim SOM A ← SOM A + P AR

11

fim repita

12

escreva SOMA

13

fim algoritmo.

61


7.3.3 Interrupc¸˜ao no fim Por u´ltimo, o Algoritmo 25 apresenta a forma geral de uma estrutura de repetic¸˜ao com interrupc¸˜ao no fim. Nesta estrutura a sequˆencia A de comandos ser´a repetida at´e que a condic¸˜ao seja verdadeira. Quando isto ocorrer a repetic¸˜ao ser´a interrompida. A sequˆencia de comandos que vier logo ap´os a instruc¸˜ao fim repita ser´a executada. Algoritmo 25: Forma geral de uma estrutura de repetic¸˜ao com interrupc¸˜ao no fim. 1

repita

2

Sequˆencia A de comandos

3

se condic¸˜ao ent˜ ao

4

interrompa

5

fim

6

fim repita O Algoritmo 26 apresenta novamente a soma dos n´umeros pares de 100 a 200. Os

comandos que realizam a contagem e soma dos valores foram posicionados nas linhas 6 e 7. Nota-se portanto que existe uma equivalˆencia entre as trˆes formas de estrutura de repetic¸˜ao. Algoritmo 26: Soma os n´umeros pares desde 100 at´e 200 inclusive. 1

Algoritmo

2

declare PAR, SOMA num´ erico

3

SOM A ← 0

4

P AR ← 100

5

repita

6

SOM A ← SOM A + P AR

7

P AR ← P AR + 2

8

se P AR > 200 ent˜ ao interrompa

9 10

fim

11

fim repita

12

escreva SOMA

13

fim algoritmo.

62


7.4

Estrutura de repeti¸c˜ ao nas linguagens de programa¸c˜ ao

7.4.1 Estrutura enquanto A estrutura enquanto repete os comandos enquanto a condic¸˜ao for verdadeira. Algoritmo 28 apresenta a equivalˆencia do Algoritmo 27 utilizando a estrutura enquanto. Nota-se que na linha 1 a condic¸˜ao foi negada para manter a mesma funcionalidade no . Algoritmo 27: Interrupc¸˜ao no in´ıcio. 1

Algoritmo 28: Equivalˆencia usando a estrutura enquanto.

repita

2

se condic¸˜ao ent˜ ao

1

3

interrompa

2

4

fim

5

Sequˆencia B de comandos

6

3

enquanto ¬condic¸˜ao fa¸ca Sequˆencia B de comandos fim

fim repita

7.4.2 Estrutura repita ... at´e A estrutura de repetic¸˜ao repita ... at´ e, executa um conjunto de comandos at´e que uma condic¸˜ao seja verdadeira. O Algoritmo 30 apresenta a equivalˆencia do Algoritmo 29. Algoritmo 29: Interrupc¸˜ao no fim. 1

Algoritmo 30: Equivalˆencia usando a estrutura repita ... at´e.

repita

2

Sequˆencia A de comandos

1

3

se condic¸˜ao ent˜ ao

2

4

interrompa

3

5

fim

6

fim repita

repita Sequˆencia A de comandos at´ e condic¸˜ao;

7.4.3 A estrutura de repetic¸˜ao para interrupc¸˜oes no meio Na pr´atica s´o existem as estruturas de repetic¸˜ao enquanto e repita ... at´ e, esta sec¸˜ao apresenta como implementar lac¸os com interrupc¸˜ao no meio. Os algoritmos 32 e 33 apresentam a soluc¸˜ao para o Algoritmo 31.

63


Algoritmo 31: Interrupc¸˜ao no meio. 1

Algoritmo 32: Equivalente com enquanto.

repita

2

Sequˆencia A de comandos

1

Sequˆencia A de comandos

3

se condic¸˜ao ent˜ ao

2

enquanto ¬condic¸˜ao fa¸ca

4

interrompa

3

Sequˆencia B de comandos Sequˆencia A de comandos

5

fim

4

6

Sequˆencia B de comandos

5

7

fim repita

fim

Algoritmo 33: Equivalente com repita ... at´e. 1

repita

2

Sequˆencia A de comandos

3

se ¬condic¸˜ao ent˜ ao Sequˆencia B de comandos

4

fim

5 6

at´ e condic¸˜ao;

7.4.4 A estrutura para Na pr´atica n˜ao existe estrutura de repetic¸˜ao para a interrupc¸˜ao no meio. No entanto, existe alguns lac¸os compens˜ao este d´eficit, uma delas ´e o lac¸o para. Recomenda-se utilizar este lac¸o quando o in´ıcio e o fim do lac¸o ´e um valor num´erico ou a quantidade de vezes que ir´a repetir ´e bem definida. A sequˆencia A de comandos ´e repetida at´e o contador atinja o valor final. O contador normalmente ´e qualquer vari´avel do tipo num´erico que serve para guardar o valor inicial e ser incrementada at´e chegar no valor final. O programador escolhe a forma de incremento da vari´avel contadora. Geralmente o incremento se d´a de 1 em 1, no entanto este valor ´e espec´ıfico de cada problema. Algoritmo 34: Forma geral do lac¸o para. 1

para contador ← valor inicial at´ e valor final fa¸ca

2

Sequˆencia A de comandos

3

contador ← contador + 1

4

{Incremento}

fim

64


O Algoritmo 35 apresenta um exemplo de uso do lac¸o para. Neste caso realiza-se a coma dos n´umeros pares de 100 a 200, como nos algoritmos j´a apresentados. Nota-se que a vari´avel P AR foi usada como vari´avel contadora, uma vez que seu valor inicial e final s˜ao num´ericos. O incremento na linha 5 foi realizado de 2 em 2 unidades, uma vez que trata-se de n´umeros pares. Algoritmo 35: Soma os n´umeros pares desde 100 at´e 200 inclusive. 1

declare PAR, SOMA n´ umerico

2

SOM A ← 0

3

para P AR ← 100 at´ e 200 fa¸ca

4

SOM A ← SOM A + P AR

5

P AR ← P AR + 2

6

fim

7

escreva SOMA

7.5

{Incremento de 2 em 2}

Exerc´ıcios

1. Fazer um algoritmo que leia trˆes valores inteiros, determine e imprima o menor deles. Algoritmo 36: Vis˜ao ampla do algoritmo. 1

Algoritmo

2

Defina os tipos das vari´aveis

3

Leia os n´umeros

4

Determine o menor n´umero

5

Escreva o menor n´umero

6

fim algoritmo.

2. Dados trˆes valores X, Y e Z verificar se eles podem ser os comprimentos dos lados de um triˆangulo e, se forem verificar se ´e um triˆangulo equil´atero, is´osceles ou escaleno. Se eles n˜ao formarem um triˆangulo, escrever uma mensagem. • Propriedade dos triˆ angulos: O comprimento de cada lado de um triˆangulo ´e menor do que a soma dos comprimentos dos outros dois; • Equil´ atero: se os trˆes lados tiverem comprimentos iguais; • Is´ osceles: se possuir apenas dois lados de comprimentos iguais; • Escaleno: o comprimento dos trˆes lados s˜ao diferentes. 65


3. Ap´os a execuc¸˜ao do algoritmo abaixo. C estar´a armazenando o valor falso se, originalmente (FARRER et al., 1999, p. 51): 1 2

Algoritmo se A2 ≤ B3 ent˜ ao T EST E ← verdadeiro

3 4

sen˜ ao T EST E ← falso

5 6

fim

7

C ← T EST E

8

fim algoritmo.

a) A2 < B3

c) A2 ≥ B3

b) A2 ≤ B3

d) A2 > B3

e) A2 = B3

4. Dado trˆes valores distintos coloc´a-los em ordem crescente. 5. Ap´os a execuc¸˜ao do algoritmo abaixo (FARRER et al., 1999, p. 52): 1

Algoritmo

2

D←0

3

se A ≤ B e C ≥ B ent˜ ao D←5

4 5 6

fim fim algoritmo.

D estar´a armazenando o valor 5 se: a) A < B < C

b) A ≤ B ≤ C

c) A < B ≤ C

d) B < C < A

6. Executando seguinte algoritmo, que valores ser˜ao escritos? (FARRER et al., 1999, p.

66


56) 1

Algoritmo

2

declare N, QUADRADO num´ erico

3

N ← 10

4

repita

5

QU ADRADO ← N 2

6

escreva QUADRADO

7

se N = 1 ent˜ ao interrompa

8 9 10 11 12

fim N ←N −1 fim repita fim algoritmo.

7. Executando seguinte algoritmo, que valores ser˜ao escritos? (FARRER et al., 1999, p. 57) 1

Algoritmo

2

declare A, Q, TERMO num´ erico

3

A←1

4

Q←3

5

T ERM O ← A

6

repita

7

se T ERM O ≥ 2000 ent˜ ao interrompa

8 9

fim

10

escreva TERMO

11

T ERM O ← T ERM O × Q

12 13

fim repita fim algoritmo.

8. Executando seguinte algoritmo, que valor seria escrito se fosse lido o valor 30? (FARRER

67


et al., 1999, p. 57) 1

Algoritmo

2

declare D, K, NUMERO, SOMA num´ erico

3

leia NUMERO

4

SOM A ← N U M ERO + 1

5

K ← QU OCIEN T E(N U M ERO, 2)

6

D←2

7

repita

8

se D > K ent˜ ao interrompa

9 10

fim

11

se REST O(N U M ERO, D) = 0 ent˜ ao SOM A ← SOM A + D

12 13

fim

14

D ←D+1

15

fim repita

16

escreva SOMA

17

fim algoritmo.

68


9. Reescreva o algoritmo abaixo usando os lac¸os enquanto ou repita ... at´ e. 1

Algoritmo

2

declare PAR, SOMA num´ erico

3

SOM A ← 0

4

P AR ← 100

5

repita

6

se P AR > 200 ent˜ ao interrompa

7 8

fim

9

SOM A ← SOM A + P AR

10

P AR ← P AR + 2

11

fim repita

12

escreva SOMA

13

fim algoritmo.

10. Reescreva o algoritmo abaixo usando os lac¸os enquanto e repita ... at´ e. 1

Algoritmo

2

declare PAR, SOMA num´ erico

3

SOM A ← 0

4

P AR ← 98

5

repita

6

P AR ← P AR + 2

7

se P AR > 200 ent˜ ao interrompa

8 9 10

fim SOM A ← SOM A + P AR

11

fim repita

12

escreva SOMA

13

fim algoritmo.

69


11. Reescreva o algoritmo abaixo usando os lac¸os enquanto ou repita ... at´ e. 1

Algoritmo

2

declare PAR, SOMA num´ erico

3

SOM A ← 0

4

P AR ← 100

5

repita

6

SOM A ← SOM A + P AR

7

P AR ← P AR + 2

8

se P AR > 200 ent˜ ao interrompa

9 10

fim

11

fim repita

12

escreva SOMA

13

fim algoritmo.

12. Escreva um algoritmo que some os n´umeros no intervalo de 1 at´e 70 usando o lac¸o para. 13. Escreva um algoritmo que imprima todos os n´umeros impares no intervalo de 90 a 150.

70


ˆ REFERENCIAS

FARIAS, G. Introdu¸c˜ ao ` a Computa¸c˜ ao. 2017. Dispon´ıvel em: hhttp://producao.virtual. ufpb.br/books/camyle/introducao-a-computacao-livro/livro/livro.chunked/index.htmli. Acesso em: 07 fev. 2017. FARRER, H. et al. Algoritmos Estruturados. Rio de Janeiro: LTC - Livros T´ecnicos e Cient´ıficos Editora S. A., 1999. ´ WIKIPEDIA. N´ umero de Fibonacci. 2011. Dispon´ıvel em: hhttps://pt.wikipedia.org/wiki/ Sequ%C3%AAncia de Fibonaccii. Acesso em: 24 jan. 2011. ´ WIKIPEDIA. Python. 2012. Dispon´ıvel em: hhttp://pt.wikipedia.org/wiki/Pythoni. Acesso em: 26 jan. 2012.

71


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.