Dim 0320

download Dim 0320

of 178

Transcript of Dim 0320

  • DIM0320 - Algoritmos e Programao de Computadores

    (Notas de Aula)

    Prof. Marcelo Ferreira Siqueira

    [email protected]

    DIMAp - CCET - UFRN

    Maro 2011

  • Copyright c 2011 Marcelo Ferreira SiqueiraPermission is granted to copy, distribute and/or modify this document under the terms ofthe GNU Free Documentation License, Version 1.2 or any later version published by the FreeSoftware Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-CoverTexts. A copy of the license is included in the section entitled GNU Free DocumentationLicense.

  • SUMRIO

    1 Informaes Gerais 1

    1.1 Professor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

    1.2 Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

    2 Introduo 4

    2.1 Algoritmos e problemas computacionais . . . . . . . . . . . . . . . . . . . . . . . . 4

    2.2 Representao de algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

    2.3 Resoluo de Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

    2.4 Computadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    2.5 Exerccios propostos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    3 Tipos de Dados e Variveis 12

    3.1 Tipos de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

    3.2 Variveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

    3.3 Exemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

    3.4 Nomes de variveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

    3.5 Exerccios Resolvidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

    3.6 Exerccios propostos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

    4 Entrada e Sada 19

    4.1 Instrues de entrada e sada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    4.2 A estrutura de um algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

    4.3 Exerccios resolvidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

    4.4 Exerccios propostos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

    5 Expresses Aritmticas Parte 1 24

    5.1 Operadores aritmticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

    5.2 Precedncia de operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

    i

  • 5.3 Alterao de prioridades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    5.4 A instruo de atribuio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

    5.5 Exerccios resolvidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    5.6 Exerccios propostos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    6 Prova de Avaliao de Conhecimento Prvio 31

    7 Expresses Aritmticas Parte 2 32

    7.1 Operadores aritmticos sobre os reais . . . . . . . . . . . . . . . . . . . . . . . . . 32

    7.2 Regras semnticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

    7.3 Um algoritmo envolvendo constantes e variveis reais . . . . . . . . . . . . . . . . 34

    7.4 Exerccios resolvidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

    7.5 Exerccios propostos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

    8 Expresses Relacionais 38

    8.1 Operadores relacionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

    8.2 Relaes e expresses aritmticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

    8.3 Relaes envolvendo tipos no inteiros . . . . . . . . . . . . . . . . . . . . . . . . 39

    8.4 Exerccios resolvidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

    8.5 Exerccios propostos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

    9 Exerccios para a Primeira Avaliao 43

    10 Primeira Avaliao 45

    11 Correo da Primeira Avaliao 51

    12 Estruturas Condicionais - Parte 1 57

    12.1 Motivao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

    12.2 Comando se-entao-senao-fimse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

    12.3 Aninhamento de comandos condicionais . . . . . . . . . . . . . . . . . . . . . . . 60

    12.4 Comando se-entao-fimse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

    12.5 Exerccios resolvidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

    12.6 Exerccios propostos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

    13 Expresses Lgicas 66

    13.1 Lgica proposicional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

    ii

  • 13.2 Proposies compostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

    13.3 Operadores lgicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

    13.4 Exerccios resolvidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

    13.5 Exerccios propostos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

    14 Estruturas Condicionais - Parte 2 74

    14.1 Usando proposies compostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

    14.2 Troca de contedo entre duas variveis . . . . . . . . . . . . . . . . . . . . . . . . 75

    14.3 O comando escolha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

    14.4 Exerccios propostos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

    15 Estruturas de Repetio - Parte 1 81

    15.1 O comando enquanto-faca-fimenquanto . . . . . . . . . . . . . . . . . . . . . . . . 81

    15.2 Exemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

    15.3 Exerccios propostos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

    16 Estruturas de Repetio - Parte 2 87

    16.1 A seqncia de Fibonacci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

    16.2 Inverso da ordem dos dgitos de um nmero . . . . . . . . . . . . . . . . . . . . 88

    16.3 Teste de primalidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

    16.4 Exerccios propostos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

    17 Estruturas de Repetio - Parte 3 95

    17.1 O clculo da mdia aritmtica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

    17.2 O maior elemento de uma seqncia . . . . . . . . . . . . . . . . . . . . . . . . . . 96

    17.3 Os mltiplos de posio na seqncia . . . . . . . . . . . . . . . . . . . . . . . . . 97

    17.4 Exerccios Propostos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

    18 Estruturas de Repetio - Parte 4 102

    18.1 O lao repita . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

    18.2 Exemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

    18.3 Lao repita versus lao enquanto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

    18.4 Exerccios propostos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

    19 Vetores 109

    19.1 Motivao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

    iii

  • 19.2 Definio e manipulao de variveis . . . . . . . . . . . . . . . . . . . . . . . . . 110

    19.3 O clculo do desvio padro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

    19.4 O comando para-faca-fimpara . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

    19.5 Exerccios propostos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116

    20 Segunda Avaliao 118

    21 Correo da Segunda Avaliao 122

    22 Aninhamento de Laos 126

    22.1 Laos aninhados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126

    22.2 Ordenao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128

    22.3 Exerccios propostos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134

    23 Matrizes - Parte 1 138

    23.1 Definio e Manipulao de Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . 138

    23.2 Exemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

    23.2.1 Soma de duas matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

    23.2.2 Clculo de norma matricial . . . . . . . . . . . . . . . . . . . . . . . . . . . 142

    23.2.3 Clculo da matriz transposta . . . . . . . . . . . . . . . . . . . . . . . . . . 144

    23.3 Exerccios propostos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144

    24 Matrizes - Parte 2 147

    24.1 Mais exemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

    24.1.1 Multiplicao de duas matrizes . . . . . . . . . . . . . . . . . . . . . . . . . 147

    24.1.2 Quadrado mgico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149

    24.2 Exerccios propostos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

    25 Modularizao - Parte 1 156

    25.1 Exerccios propostos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

    26 Modularizao - Parte 2 157

    26.1 Exerccios propostos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

    27 Recursividade 158

    27.1 Exerccios propostos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

    28 Fluxogramas 159

    iv

  • 28.1 Exerccios propostos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159

    29 Terceira Avaliao 160

    30 Correo da Terceira Avaliao 165

    v

  • AULA 1

    INFORMAES GERAIS

    Professor

    Nome Marcelo Ferreira Siqueira

    Email [email protected]

    Sala DIMAp 16 (primeiro andar)

    Telefone 3215 3814/3816 Ramal 228

    Horrio de atendimento por demanda e marcado com antecipao

    Local e Horrio de Aulas

    Local Setor 3, sala G3

    Horrio Teras e quintas das 10h50min s 12h30min (35M56)

    Contedo Programtico

    1. Problemas computacionais, algoritmos e computadores

    2. Tipos de dados, variveis

    3. Expresses aritmticas

    4. Entrada e sada

    5. Expresses relacionais

    6. Expresses lgicas

    7. Estrutura condicional

    8. Estruturas de repetio

    9. Vetores

    10. Matrizes

    1

  • 1.1 PROFESSOR 2

    11. Modularizao

    12. Recursividade

    13. Fluxogramas

    Os tpicos 1, 2, 3, 4, 5 e a primeira parte de 7 sero cobertos na Unidade I da disciplina. Ostpicos 6, a segunda parte de 7, 8 e 9 sero vistos na Unidade II. Os tpicos 10, 11, 12 e 13 seroestudados na Unidade III.

    Sistema de Avaliao

    A disciplina contar com trs provas escritas, denotadas por P1, P2 e P3. As notas dasunidades I, II e III sero as notas obtidas nas provas P1, P2 e P3, respectivamente. As datasdas provas P1, P2 e P3, assim como a data do exame final, j foram informadas no SIGAA eso as seguintes:

    Primeira prova: 5 de abril de 2011. Segunda prova: 17 de maio de 2011. Terceira prova: 16 de junho de 2011. Exame final: 5 de julho de 2011.

    Todas as provas, inclusive o exame final, sero realizadas na sala de aula da disciplina edurante o horrio de aula (das 10h50min s 12h30min). Por favor, atente-se ao horrio dasaulas e provas, pois nenhum aluno ter permisso para entrar em sala depois que a prova jtiver sido iniciada.

    1.1 Professor

    Nome Marcelo Ferreira Siqueira

    Email [email protected]

    Sala DIMAp 16 (primeiro andar)

    Telefone 3215 3814/3816 Ramal 228

    Horrio de atendimento por demanda e marcado com antecipao

    1.2 Bibliografia

    Nesta disciplina, no adotaremos nenhum livro-texto em particular, pois nenhum deles suficientemente adequado para as necessidades da disciplina. No entanto, notas de aula serodisponibilizadas para os alunos medida que os tpicos da disciplina forem cobertos. Os

    DIM0320 - 2011.1 - DIMAP/UFRN PROF. MARCELO FERREIRA SIQUEIRA

  • 1.2 BIBLIOGRAFIA 3

    alunos tambm tero acesso aos eventuais slides utilizados pelo professor durantes as. Tantoas notas de aula quanto os slides sero disponibilizados, na forma de arquivos em formatoPDF, para download no SIGAA. Apesar de no adotarmos nenhum livro-texto em particular,recomendamos o uso do livro em [3] para complementar as notas de aula e como fonte deexerccios.

    DIM0320 - 2011.1 - DIMAP/UFRN PROF. MARCELO FERREIRA SIQUEIRA

  • AULA 2

    INTRODUO

    2.1 Algoritmos e problemas computacionais

    A palavra algoritmo tem origem no sobrenome do matemtico, astrnomo, gelogo, ge-grafo e autor persa Mohammed ibn-Musa al-Khwarizmi, que viveu entre 780 e 850 d.C [2].No sculo XII, sua obra sobre numerais indianos foi traduzida para o latim e apresentou a no-tao posicional decimal para o Mundo Ocidental. Ele tambm apresentou a primeira soluosistemtica das equaes lineares e quadrticas e considerado um dos fundadores da lge-bra [1]. O radical de algarismo e algoritmo vem de Algoritmi, a forma latina do sobrenomeal-Khwarizmi.

    H tantas definies diferentes para o termo algoritmo quanto autores escrevendo sobreelas. No entanto, todas essas definies concordam que um algoritmo uma seqncia finitade instrues, bem definidas e no-ambguas, para resolver umdado problema. Cada instruode um algoritmo deve ser executada por um perodo de tempo finito. Em geral, a definio dealgoritmo ilustrada atravs de qualquer processo mecnico, tal como uma receita culinriaou a troca de pneu de um automvel. No entanto, aqui, estamos interessados em algoritmoscomputacionais, ou seja, algoritmos que descrevem instrues a serem executadas por com-putador.

    Para exemplificar o que entendemos por algoritmo computacional, vamos considerar oproblema de se calcular a rea A de um quadrado Q de lado l. No ensino mdio, aprendemosque

    A = l2 . (2.1)

    Ento, dado o comprimento l dos lados do quadrado Q, uma forma de resolver o problema usar a frmula acima, ou seja, multiplicar o valor de l por ele prprio. Note que a frmula em(2.1) pode ser usada para calcular a rea A de qualquer quadrado. Tudo o que precisamos saberpara utilizar a frmula para obter a rea A de qualquer quadrado o comprimento l do ladodo quadrado.

    Suponha, agora, que devemos escrever uma seqncia de instrues para calcular A, a qualdeve ser seguida por uma criana que sabe multiplicar dois nmeros e sempre faz isso deforma correta. A criana deve nos solicitar o comprimento l do lado do quadrado Q e, depoisde calcular A, ela deve nos informar o valor deA obtido por ela. Este valor deve ser escrito, pelacriana, em uma folha de papel usando lpis ou caneta. Uma possvel seqncia de instrues

    1. Solicite o comprimento l do lado do quadrado.

    4

  • 2.1 ALGORITMOS E PROBLEMAS COMPUTACIONAIS 5

    2. Multiplique l por l

    3. Escreva o resultado da multiplicao na folha de papel.

    A seqncia acima, por mais simples que seja, ilustra todos os elementos essenciais dadefinio de algoritmo. A seqncia finita (h apenas trs instrues). Cada uma delas estbem definida, no deixa nenhuma dvida sobre o que deve ser feito e pode ser realizada emum perodo finito de tempo. H ainda, no nosso exemplo, dois componentes fundamentais dosalgoritmos computacionais: entrada e sada. A entrada consiste do conjunto de dados que deveser fornecido ao algoritmo, enquanto a sada o conjunto de dados produzidos pelo algoritmo.No exemplo acima, a entrada o comprimento l do lado do quadrado e a sada a rea A doquadrado.

    O exemplo acima tambm ilustra uma caracterstica importante dos algoritmos computa-cionais: eles so agentes transformadores de dados de entrada em dados de sada. Este processode transformao comumente denominado processamento. Da, o termo processamento dedados. No exemplo, o valor de l foi processado para gerar o valor de A. O processamento,neste caso, consiste na multiplicao de l por l. importante perceber que um algoritmo no a soluo de um problema, mas sim um processo para se obter a soluo. Um problema que pode serresolvido por um algoritmo computacional denominado problema computacional. Isto ,um problema computacional aquele que pode ser resolvido por um computador atravs deum algoritmo.

    AlgoritmoEntrada Sada

    Figura 2.1: A transformao de entrada em sada por um algoritmo.

    Um problema computacional possui vrias ocorrncias (ou instncias). Uma ocorrncia deum problema computacional uma instncia qualquer da entrada do problema. Por exemplo,no problema do clculo da rea do quadrado, sabemos que a entrada do problema o com-primento l do lado do quadrado. Ento, qualquer valor vlido para l, ou seja, qualquer realpositivo, uma instncia do problema, por exemplo l = 2. Um algoritmo deve sempre serconstrudo para resolver todas as possveis ocorrncias de um problema. O algoritmo do nossoexemplo contm instrues para o clculo da rea A do quadrado para qualquer valor de ldado.

    Um algoritmo dito correto se ele sempre termina e produz a resposta correta para todasas ocorrncias de um dado problema. O algoritmo do nosso exemplo, portanto, correto.Obviamente, a criana que executa as instrues deve saber cumpri-las de forma correta. Nanossa analogia, a criana o computador. Os computadores que usamos na prtica semprecumprem as instrues que lhes damos de forma correta. Se houver algum erro na tentativa desolucionar um problema computacional atravs de um computador, este erro est nas prpriasinstrues que lhe demos. O computador apenas executa, fielmente, as instrues que lhedamos.

    Quando comeamos a construir algoritmos, umas das habilidades mais importantes

    DIM0320 - 2011.1 - DIMAP/UFRN PROF. MARCELO FERREIRA SIQUEIRA

  • 2.2 REPRESENTAO DE ALGORITMOS 6

    aquela de identificar qual a entrada e qual a sada do algoritmo a partir da descrio (oudeclarao) do problema. Voc deve procurar adquirir e aprimorar esta habilidade sem se pre-ocupar em como resolver o problema ou escrever o algoritmo. Muitas vezes, o enunciado deum problema computacional descreve, de forma explcita, qual a entrada e qual a sada doalgoritmo:

    Escreva um algoritmo que recebe, como entrada, a base e a altura de um retngulo qualquer eproduz como sada a rea do retngulo.

    Note que o prprio enunciado torna evidente que a entrada consiste dos comprimentos da basee altura de um retngulo e a sada, da rea do retngulo. No entanto, o problema poderia serdescrito como

    Dados a base e a altura de um retngulo qualquer, calcule e escreva a rea do retngulo.

    Note que, em ambos os casos, no preciso saber calcular a rea do retngulo ou escrever oalgoritmo que faz este clculo para determinar que a entrada do algoritmo a base e a alturade um retngulo e a sada, ou seja, o dado que o algoritmo deve produzir como resposta, area do retngulo.

    2.2 Representao de algoritmos

    Em geral, algoritmos so descritos atravs de uma linguagem que se assemelha quela queusamos para nos comunicar. O vocabulrio das linguagens destinadas descrio de algo-ritmos extremamente pequeno quando comparado ao das linguagens coloquiais, mas ricoo suficiente para resolvermos uma gama enorme de problemas computacionais. Aqui, de-screveremos algoritmos com uma linguagem conhecida como Portugol, que utilizada pelaferramenta VISUALG , que ser utilizada na disciplina como forma de apoio ao aprendizadode algoritmos.

    Por exemplo, usando a linguagem Portugol da VISUALG, o algoritmo que vimos na seoanterior para calcular a rea de um quadrado a partir do comprimento de seus lados descritocomo em 2.1:

    Algoritmo 2.1: Algoritmo para calcular a rea de um quadrado.

    1 algoritmo "Area do quadrado2 var lado, area : real3 inicio4 escreva ( "Entre com o comprimento dos lados do quadrado: " )5 leia ( lado )6 area

  • 2.3 RESOLUO DE PROBLEMAS 7

    Parte do processo de aprendizado de construo de algoritmos dedicada familiarizaocom os aspectos sintticos de alguma linguagem de descrio de algoritmos. Felizmente, aslinguagens de descrio de algoritmos possuem estruturas sintticas bastante parecidas entresi. Isto faz com que o uso de outra linguagem, aps o aprendizado da primeira, seja bastantefacilitado.

    Uma outra forma de descrevermos algoritmos atravs do uso de fluxogramas, que so di-agramas com figuras que identificam as vrias instrues do algoritmo. Nesta disciplina, tam-bm utilizaremos fluxogramas, embora a principal forma de descrio seja mesmo a linguagemPortugol.

    area

  • 2.4 COMPUTADORES 8

    conhecimento e destreza.

    Conhecimento adquirido pelo estudo. Em termos de resoluo de problemas, est rela-cionado a que tticas e estratgias usar e quando usar. Destreza adquirida pela prtica. Aexperincia no uso do conhecimento (prtica) nos d mais agilidade na resoluo de proble-mas.

    2.4 Computadores

    O que um computador? De acordo com o Websters New World Dictionary of the AmericanLanguage (segunda edio), um computador uma mquina eletrnica que, por meio de in-strues e informaes armazenadas, executa rpida e frequentemente clculos complexos oucompila, correlaciona e seleciona dados. Basicamente, um computador pode ser imaginadocomo umamquina quemanipula informao na forma de nmeros e caracteres. A informao denominada, de maneira geral, de dado. O que faz dos computadores mquinas notveis a extrema rapidez e preciso com que eles podem armazenar, recuperar, manipular e produzirdados.

    Quando desejamos utilizar, pela primeira vez, um computador para nos auxiliar na tarefade processamento de dados, deparamo-nos com algumas questes inerentes a este processo:Como informamos ao computador o algoritmo que deve ser executado para obtermos o resul-tado desejado?, Como fornecemos a entrada do algoritmo? e Como recebemos o resultadodo algoritmo?

    O ato de instruir o computador para que ele resolva um determinado problema con-hecido como programao. Esta tarefa nada mais do que inserir no computador as aesdo algoritmo e os dados referenciados pelas aes. Estas, quando executadas pelo coputador,produzem a soluo do problema. Entretanto, antes de inserir as aes e os dados no computa-dor, devemos reescrev-las em uma linguagem apropriada para descrever algoritmos com-putacionais, ou seja, em uma linguagem de programao. O termo programa comumenteempregado para designar o algoritmo em uma linguagem de programao. Entretanto, no hdistino conceitual entre algoritmo e programa1. O Algoritmo 2.1 escrito em linguagem C mostrado no Programa 2.1. Compare os dois!

    Cada modelo de computador possui uma linguagemde programao prpria, denominadalinguagem de mquina, e, em geral, distinta das linguagens de mquina dos demais modelosde computador. Esta a nica linguagem de programao que o computador realmente en-tende. No entanto, para evitar que ns tenhamos de aprender a linguagem de mquina decada computador diferente para o qual queremos programar, muitas linguagens de progra-mao independentes de mquina foram criadas. Se voc aprende uma linguagem indepen-dente de mquina, estar apto, pelo menos em princpio, a programar qualquer computadorusando essa linguagem.

    As linguagens de programao independentes de mquina no so compreendidas peloscomputadores. Ento, para que elas possam ser teis para ns, um programa denominado

    1Em Teoria da Computao, existe uma distino, mas ela no ser levada em conta aqui.

    DIM0320 - 2011.1 - DIMAP/UFRN PROF. MARCELO FERREIRA SIQUEIRA

  • 2.4 COMPUTADORES 9

    compilador deve estar presente no computador. Um compilador para uma determinada lin-guagem de programao realiza a traduo automtica de um programa escrito em uma certalinguagem para um programa equivalente escrito na linguagem de mquina. Tudo que pre-cisamos fazer para executar um programa escrito em uma linguagem de programao que noseja a linguagem de mquina do computador compilar o nosso programa com um compi-lador especfico para aquela linguagem e, em seguida, executar o programa produzido pelocompilador.

    Programa 2.1: Programa em linguagem C para calcular a rea de um quadrado.

    1 #include 2 void main()3 {4 double lado, area ;5 printf( "Entre com o comprimento dos lados do quadrado:" ) ;6 scanf( "%f\n" , &lado ) ;7 area = lado * lado ;8 printf( "A area do quadrado e: %f\n" , area ) ;9 return ;10 }

    Tanto o algoritmo quanto os seus dados de entrada so inseridos nos computadores pormeio de equipamentos eletrnicos conhecidos como perifricos de entrada. O teclado e omouse so exemplos de perifricos de entrada. As instrues e os dados inseridos no computa-dor atravs de um perifrico de entrada so armazenados em um dispositivo do computadordenominado memria (primria ou secundria). Os dados de sada resultantes da execuodo algoritmo pelo computador so apresentados tambm por meio de equipamentos eletrni-cos denominados perifricos de sada. O monitor de vdeo e a impressora so exemplos deperifricos de sada.

    O computador executa um determinado programa atravs de um dispositivo interno de-nominado unidade central de processamento, mais conhecido no mundo dos computadorespela sua abreviao em ingls: CPU (Central Processing Unit). A CPU responsvel por buscaras instrues e os dados do programa que esto armazenados na memria do computador, de-codificar as instrues e executar a tarefa descrita por elas com os respectivos dados. A CPUpode ser vista como o crebro do computador.

    No mundo dos computadores, voc ouvir as pessoas falarem sobre hardware e software.Hardware se refere mquina propriamente dita e a todos os perifricos conectados a ela.Software se refere aos programas que fazem a mquina realizar alguma tarefa. Muitos pa-cotes de software esto disponveis nos dias atuais. Eles incluem processadores de texto,planihas eletrnicas, sistemas gerenciadores de banco de dados, jogos, sistemas operacionais ecompiladores. Voc pode e aprender a criar seus prprios softwares. Para criar software, vocdever adquirir competncias e habilidades para: (1) desenvolver algoritmos para solucionarproblemas computacionais e (2) usar uma linguagem de programao. Aqui, dedicamo-nos (1).

    DIM0320 - 2011.1 - DIMAP/UFRN PROF. MARCELO FERREIRA SIQUEIRA

  • 2.5 EXERCCIOS PROPOSTOS 10

    2.5 Exerccios propostos

    1. O primeiro passo no desenvolvimento de um algoritmo para um dado problema com-putacional o entendimento da entrada e da sada do problema. Este entendimento devepreceder qualquer tentativa de desenvolvimento de uma soluo para o problema. Nesteexerccio, voc deve descrever qual a entrada e qual a sada de cada um dos problemaslistados abaixo:

    (a) Dado um nmero inteiro qualquer, calcule e escreva o antecessor e o sucessor donmero dado.

    (b) Dados trs nmeros reais no-negativos, calcule e escreva a mdia aritmtica dosnmeros dados.

    (c) Dado um nmero real qualquer, calcule e escreva a tera parte do nmero dado.

    (d) Dados o termo inicial e a razo de uma PA, bem como um nmero inteiro positivon, calcule e escreva o valor do n-simo termo dessa PA.

    (e) Escreva um algoritmo para ler o valor de uma temperatura em graus centrgados eescrever a mesma temperatura em graus Fahrenheit. Se c o valor da temperaturaem graus centrgados, ento a temperatura, f , em Fahrenheit dada por

    f =9 c+ 160

    5.

    (f) Chico Bento deseja calcular o saldo atual de uma de suas aplicaes financeiras. Paratal, ele conhece o saldo anterior ao reajuste e sabe que este saldo foi reajustado em1%. Escreva um algoritmo para calcular e escrever esse saldo atual.

    (g) Chico Bento est preocupado com o consumo de energia de sua residncia e desejaescrever um algoritmo para ajud-lo a controlar suas despesas com energia. ChicoBento sabe que 100 quilowatts de energia equivalem a um stimo do salrio mn-imo. Ento, dados o valor do salrio mnimo e a quantidade de quilowatts gasta naresidncia de Chico Bento, calcule e escreva (a) o valor em reais de cada quilowatt,(b) o valor em reais a ser pago e (c) o novo valor em reais a ser pago se Chico Bentoganhar um desconto de 10% por pagar em dia.

    (h) Chico Bento possui um carro que faz, em mdia, 12 km com um litro de gasolina.Ele realizou uma viagem com seu carro e est interessado em saber quantos litros decombustvel o carro consumiu. Para tal, ele dispe de duas informaes: o tempogasto dirigindo e a velocidade mdia do carro. Escreva um algoritmo para calcularquantos litros de combustvel o carro de Chico Bento consumiu.

    (i) Escreva um algoritmo para ler um valor de hora, em termos de trs nmeros inteiros,hora, minuto e segundos, e calcular e escrever o nmero de segundos que se passoudesde o comeo do dia at o valor da hora que foi fornecido como entrada para oalgoritmo.

    (j) Dada uma centena, isto , um nmero inteiro positivo da forma xyz tal que x umdgito de 1 a 9 e tanto y quanto z so dgitos de 0 a 9, calcule e escreva a unidade donmero dado.Por exemplo, se o nmero dado igual a 147, a soluo do problema 7. Observeque a entrada do problema consiste de um nico valor, que um nmero inteiropositivo representando uma centena, e no os trs dgitos da centena.

    DIM0320 - 2011.1 - DIMAP/UFRN PROF. MARCELO FERREIRA SIQUEIRA

  • 2.5 EXERCCIOS PROPOSTOS 11

    2. Se voc puder, escreva um algoritmo (ou seja, uma seqncia de instrues) para resolvercada um dos problemas acima. Voc no precisa escrever as instrues na linguagemdo VISUALG, mas sim de forma livre, como na primeira seqncia de instrues que foidada para o problema da rea do quadrado.

    DIM0320 - 2011.1 - DIMAP/UFRN PROF. MARCELO FERREIRA SIQUEIRA

  • AULA 3

    TIPOS DE DADOS E VARIVEIS

    3.1 Tipos de dados

    Os dados manipulados por um algoritmo podem possuir natureza distinta, isto , podemser nmeros, letras, frases, etc. Dependendo da natureza de um dado, algumas operaespodem ou no fazer sentido quando aplicadas a eles. Por exemplo, no faz sentido falar emsomar duas letras. Para poder distinguir dados de naturezas distintas e saber quais operaespodem ser realizadas com eles, os algoritmos utilizam o conceito de tipo de dados.

    O tipo de um dado define o conjunto de valores ao qual o dado pertence, bem como o con-junto de todas as operaes que podem atuar sobre qualquer valor daquele conjunto de valores.Por exemplo, como veremos mais adiante, a linguagem que utilizaremos para descrever nos-sos algoritmos possui o tipo de dado inteiro, que consiste no conjunto de todos os nmerosinteiros, denotado por Z, e todas as operaes que podem ser aplicadas aos nmeros inteitos(isto , adio, subtrao, multiplicao, diviso inteira e resto).

    A seguir, descrevemos os tipos de dados oferecidos pela linguagem Portugol do VISUALG.Na nossa descrio, o nome de um tipo escrito no formato tipo, assim como as demais palavrasreservadas da linguagem Portugol. Alm disso, ao definirmos um dado tipo de dados, nofornecemos uma descrio detalhada das operaes que atuam sobre seus valores, pois taisoperaes sero objetos de estudo das prximas aulas.

    inteiro: consiste dos nmeros inteiros e das operaes de adio, subtrao, multipli-cao, diviso inteira e resto. Na linguagem Portugol, os nmeros inteiros so escritosapenas como a concatenao dos dgitos 0, 1, 2, 3, 4, 5, 6, 7, 8 e 9, tal como em 5, 100 e1678. Nmeros negativos so representados com o sinal na frente do nmero, talcomo 23.

    real: consiste dos nmeros reais e das operaes de adio, subtrao, multiplicao,diviso. Na linguagem Portugol, os nmeros reais so caracterizados por possurem umaparte inteira e uma parte fracionria. Por exemplo, as partes inteira e fracionria do nmeroreal 3.141596 so 3 e 141596, respectivamente. Note que um ponto e no uma vrgula usado para separar as partes inteira e fracionria.

    Como sabemos, os nmeros reais incluem os nmeros inteiros. No entanto, para evitarambigidades na escrita de algoritmos, assumimos que todo nmero escrito sem a partefracionria do tipo inteiro. Por exemplo, 5 e 5.0 se referem ao mesmo nmero (cinco),mas o primeiro do tipo inteiro e o segundo, do tipo real. Assim como os nmerosinteiros negativos, nmeros reais negativos so representados com o sinal na frentedo nmero, tal como 3.141596.

    12

  • 3.2 VARIVEIS 13

    caractere: consiste de um nico smbolo ou de uma concatenao de smbolos do alfabetousado pela linguagem Portugol. Este alfabeto inclui todas as letras do alfabeto romano,todos os dgitos, 0, 1, . . . , 9 e os caracteres de pontuao, tais como ?, ., . . ., entre muitosoutros smbolos. Os elementos do conjunto de valores do tipo caractere devem ser es-critos, nos algoritmos, entre aspas duplas, como, por exemplo, "a, "Esta e uma fraseformada por caracteres. H um elemento especial, , que denominado de palavravazia, pois no possui nenhum smbolo.

    logico: inclui apenas os valores lgicos falso e verdadeiro e as operaes de negao,conjuno e disjuno. Ns estudaremos este tipo em maiores detalhes mais adiante.

    3.2 Variveis

    Um algoritmo manipula dados, que podem ser dados variveis ou constantes. Dados var-iveis so representados por variveis, enquanto dados constantes so representados por con-stantes1.

    Uma varivel pode ser imaginada como um caixa para armazenar valores de dados. Estacaixa s pode armazenar um nico valor por vez. No entanto, o valor armazenado na caixapode mudar inmeras vezes durante a execuo do algoritmo. Em um ambiente computa-cional de verdade, a caixa correspondente a uma varivel uma posio da memria do com-putador.

    Uma varivel possui nome, tipo e contedo. O nome de uma varivel deve ser nico,isto , identificar, de forma nica, a varivel no algoritmo. O tipo de uma varivel define osvalores que podem ser armazenados na varivel. O contedo de uma varivel o valor queela armazena. importante lembrar que uma varivel s pode armazenar um valor de cadavez. No entanto, ela pode assumir vrios valores distintos do mesmo tipo durante a execuodo algoritmo.

    O ato de se criar uma varivel conhecido como declarao de varivel.

    Na linguagem Portugol, declararamos uma varivel usando uma sentena da seguinteforma:

    var nome : tipo

    onde nome o nome da varivel e tipo o tipo da varivel.

    Por exemplo, a sentena

    var lado : real

    declara uma varivel de nome lado do tipo real.

    Podemos declarar mais de uma varivel domesmo tipo emumamesma linha. Por exemplo,

    var lado, area : real

    1No discutiremos constantes neste momento.

    DIM0320 - 2011.1 - DIMAP/UFRN PROF. MARCELO FERREIRA SIQUEIRA

  • 3.2 VARIVEIS 14

    Note que nenhum contedo (isto , valor) foi associado varivel durante a sua declarao.Esta associao denominada definio e deve ser realizada aps a declarao da varivelusando uma instruo de leitura ou um comando de atribuio. Vamos detalhar essas duasformas.

    A instruo de leitura tem a forma

    leia ( nome )

    onde nome o nome de uma varivel. Por exemplo,

    leia ( lado )

    uma instruo de leitura que atribui um valor varivel lado. O valor atribudo pela in-struo deve ser fornecido como entrada para o algoritmo durante a sua execuo. Para vocter uma idia mais concreta do que estamos falando, demonstraremos, em sala de aula, a exe-cuo da instruo de leitura do comprimento dos lados de um quadrado que escrevemos parao Algoritmo 2.1.

    A instruo de atribuio possui a forma

    nome

  • 3.3 EXEMPLOS 15

    3.3 Exemplos

    Seguem abaixo alguns exemplos de declarao de variveis:

    var fruta : caractere

    var letra : caractere

    var resultado : logico

    var altura : real

    var idade : inteiro

    A seguir, temos exemplos de instrues de atribuio que atribuem valores a essas var-iveis:

    fruta

  • 3.4 NOMES DE VARIVEIS 16

    3. Nomes de variveis podem ter, no mximo, 127 caracteres.

    4. No h diferena entre letras maisculas e minsculas em nomes de variveis.

    De acordo com a regra 1, nomes de variveis no podem conter espaos em branco. Deacordo com a regra 2, nomes de variveis no podem ser palavras reservadas da linguagemPortugol. Uma palavra reservada uma palavra que possui um significado especial para alinguagem Portugol. Em geral, uma palavra reservada identifica uma instruo. Neste texto,tais palavras aparecem sublinhas. O conjunto de palavras reservadas do Portugol mostradona Tabela 3.1.

    aleatorio e grauprad passoabs eco inicio pausaalgoritmo enquanto int piarcos entao interrompa posarcsen escolha leia procedimentoarctan escreva literal quadarquivo exp log radpgrauasc faca logico raizqate falso logn randcaractere fimalgoritmo maiusc randicaso fimenquanto mensagem repitacompr fimescolha minusc secopia fimfuncao nao sencos fimpara numerico senaocotan fimprocedimento numpcarac timercronometro fimrepita ou tandebug fimse outrocaso vardeclare funcao para verdadeiro

    xou

    Tabela 3.1: Palavras reservadas da linguagem Portugol.

    Por exemplo,

    _12234, fruta e x123

    so nomes vlidos para variveis, mas

    maria bonita, pi, fru?ta e 1xed

    no so. O nome maria bonita contm um espao em branco. O nome pi uma palavra reser-vada. O nome fru?ta contm um caractere que no letra, nmero nem sublinhado, ?. O nome1xed inicia com um nmero. Com exceo de pi, que viola a regra 2, os demais nomes violam aregra 1.

    DIM0320 - 2011.1 - DIMAP/UFRN PROF. MARCELO FERREIRA SIQUEIRA

  • 3.5 EXERCCIOS RESOLVIDOS 17

    3.5 Exerccios Resolvidos

    1. Escreva a declarao de uma varivel do tipo real de nome x.

    soluo:

    var x : real

    2. Escreva a declarao de uma varivel do tipo caractere de nome carro.

    soluo:

    var carro : caractere

    3. Escreva a instruo de atribuio que atribui o valor 2.3 varivel do problema 1.

    soluo:

    x

  • 3.6 EXERCCIOS PROPOSTOS 18

    (c) x_y_1

    (d) ___

    (e) 34

    6. Escreva o tipo de dado ideal para se representar cada uma das seguintes informaes:

    (a) O nome de uma rua

    (b) A data de nascimento de uma pessoa

    (c) Se uma pessoa diabtica ou no

    (d) O saldo de uma conta bancria

    (e) O resultado de uma operao de raiz quadrada

    7. Identifique o tipo de dados dos seguintes valores:

    (a) "9 de agosto de 1968"

    (b) 1.3

    (c) falso

    (d) 31(e) "?"

    DIM0320 - 2011.1 - DIMAP/UFRN PROF. MARCELO FERREIRA SIQUEIRA

  • AULA 4

    ENTRADA E SADA

    4.1 Instrues de entrada e sada

    Todo algoritmo necessita de uma forma de obteno dos dados de entrada do problema,assim como uma forma de comunicao da sada por ele produzida. Para tal, os algoritmoscontam com instrues de entrada e sada. Na linguagem Portugol, a instruo de leitura leiae a instruo de sada escreva. Como vimos na aula anterior, a instruo de leitura requer onome de uma varivel para armazenar o dado de entrada a ser obtido.

    Por exemplo,

    leia( lado )

    onde lado o nome de uma varivel. Quando a instruo acima executada, o valor lido passaa ser o contedo de lado. Logo, para acessar o valor lido, basta usarmos o nome da varivel. importante lembrar que a varivel tem de ser declarada antes de seu uso pela instruo deleitura.

    A instruo de escrita, na linguagem Portugol, denominada escreva. Esta instruo tam-bm requer um argumento, que corresponde ao valor a ser escrito como sada. Este valor podeser o contedo de uma varivel ou uma constante do tipo inteiro, real ou caractere.

    Por exemplo,

    escreva( lado )

    escreve como sada o valor da varivel de nome lado.

    interessante frisar que a instruo de escrita no usada apenas para escrever o resultadodo algoritmo, mas sim para escrever qualquer informao que auxilie a comunicao entre oalgoritmo e o mundo exterior. Por exemplo, comum escrevermos uma mensagem antes deuma instruo de leitura. Esta mensagem, em geral, uma descrio muito sucinta do valorque o algoritmo espera receber do mundo exterior para atribuir varivel na instruo deleitura.

    Por exemplo, a instruo

    escreva( "Entre com o comprimento dos lados do quadrado: ")

    pode preceder a instruo

    leia( lado )

    para indicar ao mundo exterior que o algoritmo espera um valor correspondente ao com-primento dos lados de um quadrado. A mensagem Entre com o comprimento dos lados do

    19

  • 4.2 A ESTRUTURA DE UM ALGORITMO 20

    quadrado: um valor constante, ou seja, um valor do conjunto de valores do tipo caractere.Quando a instruo de escrita acima executada, a sada correspondente a sentena entreaspas duplas:

    Entre com o comprimento dos lados do quadrado:

    O uso da instruo de escrita para emitir mensagens motivado pelo fato de um programade computador, em geral, interagir com o ser humano durante sua execuo; isto , o mundoexterior , em geral, um humano. Mais especificamente, bastante comum que a entrada deum programa seja fornecida por um ser humano. Neste caso, as mensagens de sada tm comoobjetivo auxiliar a comunicao entre o programa e o ser humano, que conhecido por usurio.Em um ambiente de programao tpico, as mensagens de sada aparecem em um monitor devdeo e os dados de entrada so fornecidos ao programa por meio de um teclado ou mouse.

    4.2 A estrutura de um algoritmo

    Um algoritmo escrito em Portugol pode ser tipicamente dividido nas seguintes partes:

    A linha de cabealho, que a primeira linha do algoritmo, contm a palavra

    algoritmo

    seguida por um texto que identifica o algoritmo.

    A declarao de variveis, que a seo em que as variveis so declaradas, iniciadapela palavra var e seguida por uma ou mais declaraes de variveis.

    O corpo do algoritmo, que contm as instrues que, de fato, fazem o trabalho descritopelo algoritmo.

    O corpo do algoritmo se inicia com a palavra

    inicio

    A linha final, que obrigatoriamente a ltima linha do algoritmo, contm a palavra

    fimalgoritmo

    que especifica o trmino do algoritmo.

    Os algoritmos escritos na linguagem Portugol tambm possuem algumas particularidadesque os tornam mais claros e mais fceis de serem lidos e entendidos. As principais caractersti-cas so:

    Cada instruo do algoritmo escrita em uma linha dedicada apenas instruo. As declaraes de variveis e o contedo do corpo do algoritmo so identados com relao linha de cabealho e a linha final. Alm disso, pode ser que haja linhas em brancoentre uma seqncia de linhas. Essas linhas em branco servem para separar partes doalgoritmo que esto menos relacionadas.

    DIM0320 - 2011.1 - DIMAP/UFRN PROF. MARCELO FERREIRA SIQUEIRA

  • 4.2 A ESTRUTURA DE UM ALGORITMO 21

    O algoritmo pode conter comentrios. Comentrios so linhas no executveis, ou seja,elas no fazem parte do processo de produo da sada do algoritmo e servem apenaspara nos auxiliar na leitura e entendimento da soluo do algoritmo. As linhas de co-mentrio se iniciam obrigatoriamente com o smbolo //.

    O Algoritmo 4.1 l o valor de uma varivel, denominada num, e escreve este mesmo valorcomo sada.

    Algoritmo 4.1: Algoritmo para ler um numero inteiro e escrever o valor lido.

    1 //2 // Este algoritmo exemplifica as instrucoes de entrada e saida3 //4 algoritmo "Leitura e escrita"5 var

    6 //7 // Secao de declaracao de variaveis8 //9 num : inteiro10 inicio11 // Escreve uma mensagem para indicar o que deve ser lido pelo algoritmo12 escreva ( "Entre com um numero inteiro: " )13

    14 // Realiza a leitura de um numero inteiro e o associa a uma variavel15 leia ( num )16

    17 // Escreve o valor do numero lido18 escreva ( "O numero que voce forneceu foi: " , num )19 fimalgoritmo

    Alguns comentrios sobre o algoritmo acima:

    O nome do algoritmo foi escrito cercado por aspas duplas:algoritmo Leitura e escrita

    Devemos declarar uma varivel para cada dado de entrada. No problema computacionalacima, a entrada consiste apenas de um nmero inteiro. Logo, declaramos apenas umavarivel para a entrada do problema: num.

    A instruo de sada foi utilizada para emitir uma mensagem,escreva ( Entre com um numero inteiro: )

    e para escrever a sada do algoritmo:

    escreva ( O numero que voce forneceu foi: , num )

    Note que a linha acima possui dois dados separados por vrgula. O primeiro a men-sagem e o segundo a varivel num. Neste caso, os dados so escritos no dispositivo desada em uma mesma linha, separados por um espao e sem a vrgula.

    DIM0320 - 2011.1 - DIMAP/UFRN PROF. MARCELO FERREIRA SIQUEIRA

  • 4.3 EXERCCIOS RESOLVIDOS 22

    4.3 Exerccios resolvidos

    1. Considere o Algoritmo 4.2 para ler e escrever um nmero e uma palavra:

    Algoritmo 4.2: Algoritmo para ler um numero e uma palavra e escrever ambos.

    1 //2 // Este algoritmo le e escreve um numero e uma palavra3 //4 algoritmo "Leitura e escrita de numero e palavra"5 var

    6 //7 // Secao de declaracao de variaveis8 //9 num : inteiro10 pal : caractere11 inicio12 // Escreve uma mensagem para solicitar um numero13 escreva ( "Entre com um numero inteiro: " )14

    15 // Realiza a leitura de um numero inteiro e o atribui a uma variavel16 leia ( num )17

    18 // Escreve uma mensagem para solicitar uma palavra19 escreva ( "Entre com uma palavra: " )20

    21 // Realiza a leitura de uma palavra e a atribui a uma variavel22 leia ( pal )23

    24 // Escreve numero e palavra lidos25 escreva ( "O numero e a palavra fornecidos foram: " , num , " e ", pal )26 fimalgoritmo

    Ento, responda:

    (a) Quais so os dados de entrada do algoritmo?

    (b) Qual(is) (so) a(s) varivel(is) que armazena(m) o(s) valor(es) de entrada?

    (c) Se fornecermos o o nmero inteiro 5 e a palavra algoritmo como entrada para oalgoritmo, o que o algoritmo escreve como sada?

    soluo:

    1. (a) Um nmero inteiro e uma palavra.

    (b) num e pal.

    (c) O numero e a palavra fornecidos foram: 5 e algoritmo

    DIM0320 - 2011.1 - DIMAP/UFRN PROF. MARCELO FERREIRA SIQUEIRA

  • 4.4 EXERCCIOS PROPOSTOS 23

    4.4 Exerccios propostos

    1. Escreva um algoritmo para ler um nmero real e uma letra e escrever o nmero e a letralidos.

    2. Use a ferramenta VISUALG para executar o algoritmo que voc escreveu para o problemaanterior.

    DIM0320 - 2011.1 - DIMAP/UFRN PROF. MARCELO FERREIRA SIQUEIRA

  • AULA 5

    EXPRESSES ARITMTICAS PARTE 1

    5.1 Operadores aritmticos

    Os operadores aritmticos definem as operaes aritmticas que podem ser realizadas sobreos nmeros inteiros e reais. Para os inteiros, as operaes aritmticas so a adio, subtrao,multiplicao e resto. Para os nmeros reais, as operaes aritmticas so a adio, subtrao,multiplicao e diviso. Nesta aula, restringiremos nossa ateno aos nmeros inteiros apenas.Na linguagem Portugol, os operadores aritmticos correspondentes s operaes definidas so-bre os inteiros so

    + (adio) (subtrao ou menos unrio) (multiplicao) \ (diviso inteira) % (resto aplicado apenas aos valores inteiros).

    Com os operadores acima, podemos escrever expresses aritmticas que envolvem constantese variveis inteiras. Por exemplo, suponha que a, b e c sejam variveis do tipo inteiro. Ento,temos que

    a+ b+ c, a b c%2, e 5 + 3 8 \ 2so todas expresses aritmticas vlidas na linguagem Portugol.

    Nos exemplos acima, tivemos o cuidado de usar operandos do mesmo tipo. A razo paratal que, por definio, cada operador aritmtico atua sobre valores de um mesmo tipo e oresultado da operao deve sempre ser um valor do mesmo tipo dos operandos. Logo, nofaz sentido escrevermos algo como a + 2 quando a uma varivel ou constante do tipo real,pois existe uma ambigidade em relao ao resultado da operao. No entanto, como veremosmais adiante, podemos definir regras semnticas associadas aos operadores que nos permiteminterpretar, de forma nica, o resultado da operao aritmtica correspondente. Tais regras nospermitiro escrever expresses aritmticas envolvendo variveis e constantes dos tipos inteiroe real.

    24

  • 5.2 PRECEDNCIA DE OPERADORES 25

    5.2 Precedncia de operadores

    Qual o valor da expresso aritmtica

    5 3%2 ?

    Podemos dizer que o valor da expresso igual a 1, se avaliarmos 5 3 primeiro e, depois,15%2, ou podemos dizer que igual a 5 se avaliarmos 3%2 primeiro e, depois, 5 1. As duasrespostas so igualmente vlidas. No entanto, como no podemos permitir ambigidades emalgoritmos, devemos definir regras de precedncia de operadores, que so regras para definir aordem em que os operadores aritmticos que vimos so aplicados em uma expresso aritmticaqualquer.

    Na linguagem Portugol, os operadores possuem prioridades associadas com eles. A op-erao associada a um operador com prioridade p sempre executada antes da operao as-sociada a um operador com prioridade q sempre que p > q. Quando p = q, a operao cor-respondente ao operador mais esquerda executado. O operador de maior prioridade omenos unrio, . Em seguida, temos os operadores , \ e %. Finalmente, com a prioridademais baixa, temos os operadores + e , onde + e so os operadores de adio e subtrao,respectivamente. A Tabela 5.1 resume essas prioridades.

    Operador Smbolo Prioridade

    menos unrio mais altamultiplicao, diviso inteira e resto , \ e %

    adio e subtrao +, mais baixa

    Tabela 5.1: Operadores aritmticos sobre os inteiros e suas prioridades.

    Por exemplo, ema+ b+ c ,

    a operao a+ b realizada e, em seguida, o resultado dela adicionado ao valor de c, pois osoperadores possuem a mesma prioridade e, portanto, as operaes so realizadas da esquerdapara a direita.

    Na expresso aritmticaa b c%2 ,

    a operao b c efetuada primeiro e, em seguida, o resto da diviso de b c por 2 calculado.Finalmente, o resto subtrado de a. Note que a multiplicao foi efetuada antes da diviso,pois os operadores e% possuem a mesma prioridade, mas est mais esquerda.

    Uma boa forma de se familiarizar com os operadores aritmticos e as regras de precedncia escrevendo algoritmos para escrever o resultado de expresses aritmticas. O Algoritmo 5.1calcula e escreve, usando a instruo escreval, o resultado de expresses envolvendo nmerosinteiros. A instruo escreval faz o mesmo que a instruo escreva, mas gera um salto delinha aps a escrita. Um algoritmo mais interessante, o Algoritmo 5.2, recebe, como entrada,trs inteiros quaisquer e calcula e escreve o resultado de algumas expresses aritmticas envol-vendo os inteiros lidos.

    DIM0320 - 2011.1 - DIMAP/UFRN PROF. MARCELO FERREIRA SIQUEIRA

  • 5.3 ALTERAO DE PRIORIDADES 26

    5.3 Alterao de prioridades

    Algumas vezes desejvel alterar a ordem (imposta pelas regras de precedncia) segundoa qual as operaes so realizadas em uma expresso aritmtica. Para tal, fazemos uso deparnteses. Por hiptese, todo operador possui prioridade mais baixa do que a dos parnteses.Isto garante que os operandos correspondentes ao valor das expresses entre parnteses se-jam calculados antes de serem usados pelos demais operadores. importante destacar que osparnteses devem ocorrer em pares (um aberto e um fechado) nas expresses e podem ocorreraninhados em diversos nveis.Algoritmo 5.1: Algoritmo para calcular algumas expresses aritmticas envolvendo nmerosinteiros.

    1 algoritmo "Calculo de expressoes aritmeticas"2

    3 inicio4 escreval( "O resultado da expressao 5 * 3 % 2 e: ", 5 * 3 % 2 )5

    6 escreval( "O resultado da expressao -5 * 3 % 2 \ 8 e: ", -5 * 3 % 2 \ 8 )7

    8 escreval( "O resultado da expressao -5 - 3 - 6 * 3 e: ", -5 - 3 - 6 * 3 )9

    10 fimalgoritmo

    Por exemplo, na expresso(a b) (c%2) ,

    a operao a b realizada primeiro. Em seguida, a operao c%2 realizada e, por ltimo,a multiplicao dos resultados das duas operaes anteriores entre os parnteses realizada.Mas, como sabemos disso? A idia imaginar as expresses entre parnteses como operandosa serem descobertos. Com isso emmente, a expresso acima pode ser imaginada como tendoa forma

    op1 op2 ,onde op1 e op2 so as expresses (a b) e (c%2). Ento, o que temos uma simples mul-tiplicao de dois valores, op1 e op2. No entanto, para que esta multiplicao seja realizada,precisamos dos valores op1 e op2. Para tal, assumimos que o valor, op1, esquerda do operadorde multiplicao, , ser obtido antes do valor, op2, direita dele. Para calcular op1, avaliamosa expresso

    a b ,que se encontra dentro do parnteses. Neste momento, descobrimos que a subtrao a b a primeira operao aritmtica realizada. Uma vez que o valor op1 tenha sido descoberto,avaliamos

    c%2 ,

    que a expresso correspondente ao valor op2. Neste momento, descobrimos que a operaode resto de diviso, c%2, a segunda operao aritmtica realizada. Neste momento, dispomosdos valores op1 e op2 e, portanto, podemos realizar a multiplicao op1 op2, que passa a ser

    DIM0320 - 2011.1 - DIMAP/UFRN PROF. MARCELO FERREIRA SIQUEIRA

  • 5.3 ALTERAO DE PRIORIDADES 27

    a terceira operao realizada. Logo, os operadores so aplicados na ordem , % e . Usamos anotao

    (a1 b) 3 (c%2 2)para indicar este fato. Isto , os operadores possuem ndices que indicam a ordem em que soaplicados.

    Algoritmo 5.2: Algoritmo para calcular algumas expresses aritmticas com variveis inteiras.

    1 algoritmo "Expressoes aritmeticas envolvendo variaveis e constantes"2 var

    3 a , b , c : inteiro4 inicio5 escreva( "Entre com o valor da variavel a: " )6 leia( a )7

    8 escreva( "Entre com o valor da variavel b: " )9 leia( b )10

    11 escreva( "Entre com o valor da variavel c: " )12 leia( c )13

    14 escreval( "O resultado da expressao a * b % c e: ", a * b % c )15

    16 escreval( "O resultado da expressao -a * b % c * 8 e: ", -a * b % c * 8 )17

    18 escreval( "O resultado da expressao -a - b - c * 3 e: ", -a - b - c * 3 )19

    20 fimalgoritmo

    A expresso((2 + 3) (1 + 2)) 3 (3 + (3 2))

    bem mais complexa do que a anterior, mas podemos determinar a ordem em que os oper-adores so aplicados da mesma forma que antes. O primeiro passo substituir as expressesdentro dos parnteses por operandos a serem descobertos. Isto feito para os parnteses maisexternos:

    op1 3 op2 .Agora, vemos que se os valores entre parnteses fossem conhecidos, haveria apenas duas op-eraes a serem realizadas: uma multiplicao e uma adio. A multiplio possui prioridadesobre a adio e ela precisa do valor op1 para ser realizada. Ento, considere a expresso corre-spondente a op1:

    (2 + 3) (1 + 2) .Esta expresso contm outras expresses dentro de parnteses e, assim como antes, ela podeser vista como

    op3 op4 .onde op3 e op4 correspondem s expresses 2 + 3 e 1 + 2, respectivamente. Para realizarmosa operao de subtrao acima, precisamos dos valores op3 e op4. Por estar esquerda do

    DIM0320 - 2011.1 - DIMAP/UFRN PROF. MARCELO FERREIRA SIQUEIRA

  • 5.4 A INSTRUO DE ATRIBUIO 28

    operador, o valor op3 descoberto primeiro. Isto implica que a primeira operao realizada aadio

    2 + 3

    e a prxima a adio1 + 2 .

    Em seguida, temos a subtrao op3 op4:

    (2 + 3) (1 + 2) .

    Depois que a subtrao acima for realizada, o valor op1 se torna conhecido e, consequente-mente, a multiplicao op1 3 pode ser realizada, tornando-se a quarta operao realizada. Oresultado desta operao o primeiro operando disponvel da subtrao em op1 3 op2.Mas, esta subtrao no pode ser efetuada antes do valor op2 ser conhecido, ou seja, antes daexpresso

    3 + (3 2)ser avaliada. Assim como fizemos antes, podemos imaginar a expresso acima tendo a forma

    3 + op5 ,

    onde op5 o valor da expresso, 3 2, entre parnteses. A adio na expresso acima precisado valor op5 para ser realizada. Isto significa que a subtrao 3 2 a quinta operao real-izada. Depois dela, a adio 3 + op5 realizada, tornando-se a sexta operao realizada. Logoem seguida, o valor op2 se torna conhecido, o que possibilita a realizao da stima e ltimaoperao, que a subtrao em op1 3 op2. Usando a notao de subscrito, temos a seguinteordem:

    ((2 +1 3)3 (1 +2 2)) 4 37 (3 +6 (35 2)) .

    5.4 A instruo de atribuio

    Quando utilizamos expresses aritmticas em nossos algoritmos, necessitaremos, muitofreqentemente, armazenar o valor da expresso em uma varivel. Como vimos na Aula 3, aatribuio de um valor a uma varivel pode ser realizada atravs da instruo de leitura leiaou do operador de atribuio

  • 5.5 EXERCCIOS RESOLVIDOS 29

    5.5 Exerccios resolvidos

    1. Considere a expresso polinomial

    5x3 + 7x2 3x 1 ,

    onde x uma varivel. Escreva a expresso acima usando a linguagem Portugol.

    soluo:5 x x x+ 7 x x 3 x 1 .

    2. Avalie a seguinte expresso aritmtica de acordo com as regras de precedncia da lin-guagem Portugol:

    2 3 5

    soluo:

    2 3 5 = 2 15 = 13 .

    Algoritmo 5.3: Algoritmo para calcular o quadrado da soma de dois inteiros.

    1 algoritmo "Quadrado da soma de 2 inteiros"2 var

    3 a , b , quadrado : inteiro4 inicio5 escreva( "Entre com o primeiro inteiro: " )6 leia( a )7

    8 escreva( "Entre com o segundo inteiro: " )9 leia( b )10

    11 quadrado

  • 5.6 EXERCCIOS PROPOSTOS 30

    3. Suponha que a linha 11 do Algoritmo 5.3 seja substituda por

    quadrado

  • AULA 6

    PROVA DE AVALIAO DECONHECIMENTO PRVIO

    Essa aula ser dedicada aplicao de uma prova de conhecimento prvio. A prova temporobjetivo avaliar conhecimentos bsicos de matemtica e raciocnio lgico adquiridos no ensinofundamental e mdio, A prova vale 1,0 ponto. este ponto ser somado nota da primeira prova,que valer 10,0 pontos. Portanto, a nota desta prova pode apenas fazer com que a nota daprimeira unidade aumente e no prejudicar quem no a fizer ou apresentar um desempenhobaixo.

    31

  • AULA 7

    EXPRESSES ARITMTICAS PARTE 2

    7.1 Operadores aritmticos sobre os reais

    Como vimos na aula anterior, os operadores aritmticos definem as operaes aritmticasque podem ser realizadas sobre os nmeros inteiros e reais. J estudamos os operadores ar-itmticos que atuam sobre os inteiros e, nesta aula, estudaremos aqueles que atuam sobre osreais:

    + (adio). (subtrao ou menos unrio). (multiplicao). / (diviso).

    Observe que os trs primeiros operadores so comuns aos reais e inteiros. Observe tambmque o operador de diviso, /, est definido apenas para os reais. Por sua vez, o operador deresto, %, est definido apenas para os inteiros. A Tabela 7.1 lista os operadores aritmticossobre os reais e suas respectivas prioridades. Ao escrevermos expresses aritmticas, podemosalterar a prioridade desses operadores com o uso de parnteses da mesma forma que vimosantes.

    Operador Smbolo Prioridade

    menos unrio mais altamultiplicao e diviso , / adio e subtrao +, mais baixa

    Tabela 7.1: Operadores aritmticos sobre os reais e suas prioridades.

    Por exemplo, considere a expresso

    3a+ 2b

    c a 11 +

    a+ b

    2c

    ,

    onde a, b e c so variveis. Na linguagem Portugol, a expresso acima pode ser escrita comosegue:

    (3.0 a+ 2.0 b) / (c (a 1.0) / (1.0 + (a+ b) / (2.0 c))) .

    32

  • 7.2 REGRAS SEMNTICAS 33

    importante notar que todos os parnteses so necessrios para que a expresso, na lin-guagem Portugol, seja equivalente expresso aritmtica dada. Abaixo, indicamos, comndices nos operadores, a ordem em que as operaes da expresso so executadas quandoa expresso avaliada:

    (3.0 1 a+3 2.0 2 b) /11 (x10 (a4 1.0) /9 (1.0 +8 (a+5 b) /7 (2.0 6 c))) .

    O Algoritmo 7.1 calcula o valor da expresso acima para quaisquer valores de a, b e cfornecidos como entrada. O valor da expresso atribudo a uma varivel antes de ser escritocomo sada.

    Algoritmo 7.1: Algoritmo para calcular expresso aritmticas com variveis reais.

    1 algoritmo "Expressoes aritmeticas com variaveis e constantes reais"2 var

    3 a , b , c , res : real4 inicio5 escreva( "Entre com o valor da variavel a: " )6 leia( a )7

    8 escreva( "Entre com o valor da variavel b: " )9 leia( b )10

    11 escreva( "Entre com o valor da variavel c: " )12 leia( c )13

    14 res

  • 7.3 UM ALGORITMO ENVOLVENDO CONSTANTES E VARIVEIS REAIS 34

    Por exemplo, na expresso(a b) (c / 2) ,

    se as variveis a, b e c so do tipo real, o inteiro 2 convertido (automaticamente) para o real 2.0imediatamente antes da operao de diviso ser executada. Em outras palavras, na linguagemPortugol, a expresso acima equivalente expresso:

    (a b) (c / 2.0) .

    De maneira geral, o operador de diviso, /, pode ser utilizado para dividir valores inteiros.Por exemplo,

    5 / 2

    igual ao valor real 2.5. Na expresso acima, no h nenhuma constante ou varivel do tiporeal. Mas, mesmo assim, os valores inteiros, que so operandos do operador /, so conver-tidos para os valores reais equivalentes antes da operao de diviso ser efetuada. Logo, nspodemos dividir dois inteiros usando /, mas o resultado da diviso um valor do tipo reale no inteiro. Quando desejarmos realizar a diviso inteira dos dois inteiros, devemos usar ooperador \.

    Um outro aspecto importante das expresses aritmticas envolvendo valores inteiros e reais a precedncia de operadores. O que acontece se a expresso contiver os operadores / e %?Como sabemos, o operador% s pode ser aplicado a inteiros. Mas, nada impede que ele ocorraem uma expresso aritmtica que envolva inteiros e o operador /. Por exemplo, considere aexpresso

    5%2 / 2 .

    Na linguagem Portugol, o operador % possui prioridade igual a do operador /. Logo, a oper-ao 5%2 realizada primeiro, produzindo o inteiro 1 como resultado. Em seguida, a operao1 / 2 realizada. Isto significa que os valores inteiros sero convertidos (automaticamente) paravalores reais equivalentes e a diviso ser executada, gerando o valor 0.5. Bem, e se a expressofosse

    5 / 2%2 ?

    Neste caso, a diviso 5 / 2 a primeira operao realizada, gerando o nmero real 2.5 comoresultado. Em seguida, a operao 2.5%2 deve ser realizada. Mas, como o operador % nopode atuar sobre nmeros reais, a operao 2.5%2 no pode ser realizada. Voc poderia imag-inar que o nmero 2.5 seria convertido em um nmero inteiro (por arredondamento ou trunca-mento), de modo que a operao pudesse ser efetuada. Na linguagem Portugol, nenhum valor realpode ser automaticamente convertido em um valor inteiro. Isto significa que a segunda expressoaritmtica acima invlida na linguagem Portugol. A ferramenta VISUALG acusar um erro setentarmos utilizar esta expresso em um algoritmo (verifique!). Em uma aula futura, veremosuma funo da linguagem Portugol que nos permitir obter a parte inteira de um um valor realqualquer.

    7.3 Um algoritmo envolvendo constantes e variveis reais

    Considere o problema de desenvolver um algoritmo para determinar o volume, V , de umaesfera a partir do raio, r, da esfera. Como sabemos, a relao entre os valores V e r dada pela

    DIM0320 - 2011.1 - DIMAP/UFRN PROF. MARCELO FERREIRA SIQUEIRA

  • 7.4 EXERCCIOS RESOLVIDOS 35

    frmulaV =

    4

    3 pi r3 . (7.1)

    O nosso algoritmo deve ler o valor do raio r da esfera, calcular o valor de V e escrever estevalor como sada. Para calcular o valor de V , nosso algoritmo pode se utilizar da frmula emEq. (7.1). Uma das particularidades da frmula que ela utiliza a constante pi. Para lidar comsituaes como essa, a linguagem Portugol possui uma palavra reservada, chamada pi, querepresenta a constante pi. Logo, na linguagem Portugol, a frmula acima pode ser escrita comosegue:

    (4 / 3) pi raio raio raio ,onde assumimos que raio o nome da varivel que representa o raio r da esfera. Se a linguagemPortugol no nos fornecesse a constante pi, poderamos escrever uma expresso para a frmula,tal como

    (4 / 3) 3.141596 raio raio raio ,que se utiliza de um valor aproximado para o nmero pi. No entanto, o uso da palavra pi mais recomendado, pois ela faz com que a sintaxe da expresso resultante seja mais legvel esignificante.

    Uma vez que saibamos como escrever, na linguagem Portugol, a expresso arimtica quecalcula o valor do volume V da esfera de raio r, podemos desenvolver o restante do algoritmo.A entrada do algoritmo consiste apenas do valor do raio, r, da esfera. Ento, devemos declararuma varivel, digamos raio, para representar o valor de r. Aps calcularmos o valor do volume,V , da esfera usando a frmula em Eq. (7.1), atribuimos este valor a uma outra varivel, digamosvolume, que precisa ser declarada tambm. As duas variveis do algoritmo so do tipo real.Finalmente, escreveremos o valor da varivel volume como sada. O algoritmo resultante oAlgoritmo 7.2.

    Algoritmo 7.2: Algoritmo para calcular o volume da esfera.

    1 algoritmo "Volume da esfera"2 var

    3 raio, volume : real4 inicio5 escreva( "Entre com o valor do raio da esfera: " )6 leia( raio )7

    8 volume

  • 7.5 EXERCCIOS PROPOSTOS 36

    operadores):1

    1 +1

    1 + a

    .

    Assuma que a uma varivel do tipo real.

    soluo:

    A expresso escrita em Portugol a seguinte:

    1 / (1 + (1 / 1/(1 + a)))

    Voc tambm poderia ter escrito

    1.0 / (1.0 + (1.0 / 1.0/(1.0 + a)))

    A ordem de avaliao dos operadores indicada abaixo por ndices:

    1 /5 (1 +4 (1 /3 1 /2 (1 +1 a))) .

    2. Escreva um algoritmo que leia os valores correspondentes base e altura de um retn-gulo, determine a rea do retngulo e escreva a rea como sada.

    soluo:

    Algoritmo 7.3: Algoritmo para calcular a rea de um retngulo.

    1 algoritmo "Area de um retangulo"2 var

    3 base, altura, area : real4 inicio5 escreva( "Entre com o comprimento da base do retangulo: " )6 leia( base )7

    8 escreva( "Entre com o valor da altura do retangulo: " )9 leia( altura )10

    11 area

  • 7.5 EXERCCIOS PROPOSTOS 37

    2. Escreva um algoritmo para calcular a rea de um crculo. A entrada do seu algoritmo ovalor do raio do crculo. A sada o valor da rea do crculo.

    3. Implemente o algoritmo anterior usando a ferramenta VISUALG.

    DIM0320 - 2011.1 - DIMAP/UFRN PROF. MARCELO FERREIRA SIQUEIRA

  • AULA 8

    EXPRESSES RELACIONAIS

    8.1 Operadores relacionais

    Uma expresso relacional, ou simplesmente relao, uma comparao entre dois valoresde ummesmo tipo. Esses valores so representados na relao atravs de constantes, variveisou expresses aritmticas. A operao de comparao realizada por um operador relacional.Na linguagem Portugol da ferramenta VISUALG, temos os operadores relacionais mostradosna Tabela 8.1.

    Operador Descrio

    = igual a diferente de> maior que< menor que>= maior ou igual a b e c b ,

    estamos comparando os valores das variveis a e b. O resultado desta comparao o valorlgico verdadeiro se o valor de a maior do que o de b. Caso contrrio, o resultado o valorlgico falso. Na expresso

    c

  • 8.2 RELAES E EXPRESSES ARITMTICAS 39

    8.2 Relaes e expresses aritmticas

    As relaes podem envolver expresses aritmticas. Por exemplo,

    a > (b+ c) e c

  • 8.3 RELAES ENVOLVENDO TIPOS NO INTEIROS 40

    Suponha, agora, que a e b so duas variveis do tipo caractere. Ento, as expresses rela-cionais

    a = b e a b

    equivalem a perguntar se os caracteres representados por a e b so iguais ou distintos, respec-tivamente. Tais expresses so facilmente avaliadas com base nos valores de a e b, claro.No entanto, como avaliamos as expresses relacionais envolvendo os demais operadores, porexemplo

    a < b , a > b , a = b ?

    Ou seja, o que significa dizer que uma palavra menor do que outra? Para responder esta per-gunta, vamos primeiro considerar o caso em que os valores de a e b so um caractere cada. De-pois, trataremos do caso em que esses valores so palavras com mais de um caractere. Quandoos valores de a e b so um caractere cada, usamos o ndice do caractere no alfabeto da linguagemPortugol da ferramenta VISUALG, denominado ASCII1, para decidir o resultado da compara-o.

    Cada caractere que pode ser usado na linguagem Portugol possui um nmero nico no al-fabeto ASCII. Ento, dizemos que a menor do que b se, e somente se, o ndice do caractererepresentado por a menor do que o ndice do caractere representado por b no alfabeto ASCII.As demais expresses relacionais (definidas pelos operadores >, =) so avaliadas deforma anloga. O alfabeto ASCII possui 256 smbolos e no cabe aqui descrever todos eles. Noentanto, bom saber que as letras maisculas de A a Z possuem os ndices 65 a 90, respec-tivamente, as letras minsculas de a a z possuem os ndices 97 a 122, respectivamente, e osdgitos 0 a 9 possuem os ndices 48 a 57, respectivamente. Logo, se o valor de a c e ode b 4,

    a < b , a > b , a = b

    resultam nos valores lgicos falso, verdadeiro, falso e verdadeiro, respectivamente, quando soavaliadas.

    O que dizer se pelo menos um de a e b contm uma palavra com mais de um caractere?

    Neste caso, usamos a ordem lexicogrfica para determinar o resultado das comparaes.Para tal, suponha que a palavra representada por a possua n caracteres, a1, a2, . . . , an, nestaordem, e a palavra representada por b possua m caracteres, b1, b2, . . . , bm, nesta ordem, comm,n Z e m,n 1. Seja k = min{n,m}. Ento, encontramos o menor valor de i em{1, 2, . . . , k} tal que ai 6= bi. Em seguida, ns determinamos se ai < bi, ai > bi, ai bi ouai bi.

    Por exemplo, se a = abacate e b = abacaxi, ento i = 6, pois as palavras em a e bcoincidem nos cinco primeiros caracteres, isto , ambas comeam com o prefixo abaca. Oprximo passo comparar a6 com b6. Como podemos ver, a6 igual a t e b6 igual a x.Ento, a6 < b6 e a6 b6. Logo, sabemos que a menor do que b, ou seja, sabemos que asexpresses

    a < b e a b e a >= b

    possuem valor lgico falso.

    1A abreviao de American Standard Code for Information Interchange.

    DIM0320 - 2011.1 - DIMAP/UFRN PROF. MARCELO FERREIRA SIQUEIRA

  • 8.4 EXERCCIOS RESOLVIDOS 41

    possvel que ai = bi para todos os valores de i em {1, 2, . . . , k}. Quando isto acontece,temos que a palavra em a um prefixo da palavra em b ou a palavra em b um prefixo dapalavra em a. Por exemplo, se o valor de a bola e o de b bolada, ento a palavra ema um prefixo da palavra em b e, por isso, ai = bi, para todo i {1, 2, 3, 4}. Quando issoocorre, a palavra de menor comprimento considerada a menor palavra. Isto quer dizer queas expresses

    a < b e a b e a >= b

    possuem valor lgico falso.

    Mas, e se as palavras em a e b possurem o mesmo comprimento? Se este o caso, entotemos que m = n e ai = bi para todo i = {1, 2, . . . , k}, onde k = min{n,m}. Mas, neste caso,a e b so exatamente a mesma palavra! Por exemplo, se o valor de ambas as variveis, a e b, bola, ento

    a = b, a = b

    possuem valor lgico verdadeiro, enquanto

    a b, a > b e a < b

    possuem valor lgico falso.

    Para concluir, note que no faz sentido utilizar operadores relacionais com valores do tipolgico, exceto pelos operadores = e . Em outras palavras, no faz sentido dizer que o valorverdadeiro menor, maior, menor ou igual ou maior ou igual ao valor falso. Como veremosem uma outra aula, podemos construir expresses que relacionam valores lgicos usando op-eradores lgicos.

    8.4 Exerccios resolvidos

    1. Avalie a relao abaixo:10%5 2 5 2 + 1

    soluo:

    10%5 2 5 2 + 1 0 2 5 2 + 1 0 5 2 + 1 0 10 + 1 0 11 verdadeiro

    DIM0320 - 2011.1 - DIMAP/UFRN PROF. MARCELO FERREIRA SIQUEIRA

  • 8.5 EXERCCIOS PROPOSTOS 42

    2. Suponha que x seja uma varivel do tipo inteiro e considere a relao

    x%3 > 1

    Ento, para quais valores de x a relao acima tem valor verdadeiro?

    soluo:

    O resultado de x%3 sempre 2, 1, 0, 1 ou 2. Em particular, na ferramenta VISUALG,o resto no-negativo sempre que o dividendo for no-negativo. Isto no est de acordocom a definio matemtica (e correta!) de resto. Como a relao ter valor verdadeirose, e somente se, x%3 for igual a 2, temos que o valor de x deve ser 2, 5, 8, . . ., ou seja, daforma

    2 + 3 k ,para todo k Z+.

    8.5 Exerccios propostos

    1. Suponha que a, b, nome e profissao sejam variveis do tipo real, inteiro, caractere ecaractere, respectivamente. Ento, considere as trs expresses relacionais dadas a seguir:

    a+ 1 >= b b , nome ANA e profissao = medico

    Qual o valor dessas expresses quando a, b, nome e profissao assumem os valores abaixo?

    (a) 3.0, 2, MIRIAM e ADVOGADO

    (b) 5.0, 2 2, PEDRO e MEDICO(c) 2.5, 9, ANA e PROFESSOR

    2. Suponha que x seja uma varivel do tipo real e considere a seguinte expresso relacional:

    x2 4 > 5 .

    Ento, para quais valores de x a expresso relacional acima possui valor verdadeiro?

    3. Suponha que x seja uma varivel do tipo inteiro. Ento, escreva uma expresso relacionalem Portugol que tenha valor verdadeiro se, e somente se, o valor de x um nmero mparno-negativo.

    4. Sejam a e b duas variveis do tipo caractere. Ento, escreva uma expresso relacionalenvolvendo a e b apenas que tenha resultado verdadeiro se, e somente se, a expressorelacional,

    a < b ,

    tenha resultado falso.

    DIM0320 - 2011.1 - DIMAP/UFRN PROF. MARCELO FERREIRA SIQUEIRA

  • AULA 9

    EXERCCIOS PARA A PRIMEIRAAVALIAO

    Esta aula ser dedicada ao desenvolvimento de algoritmos relacionados ao contedo daprimeira avaliao. importante que todos vocs tentem resolver os exerccios antes do dia daaula. Para cada um dos problemas, tente primeiro descrever os dados de entrada e de sada.Em seguida, crie variveis para os dados de entrada e pense em como obter os dados de sadaa partir deles. Use a ferramenta VISUALG para executar a sua soluo em algumas entradas desua escolha.

    1. Dado um nmero inteiro qualquer, calcule e escreva o antecessor e o sucessor do nmerodado.

    2. Dados trs nmeros reais no-negativos, calcule e escreva a mdia aritmtica dosnmeros dados.

    3. Dado um nmero real qualquer, calcule e escreva a tera parte do nmero dado.

    4. Dados o termo inicial e a razo de uma PA, bem como um nmero inteiro positivo n,calcule e escreva a soma dos n primeiros termos desta PA.

    5. Escreva um algoritmo para ler o valor de uma temperatura em graus centrgados e escr-ever a mesma temperatura em graus Fahrenheit. Se c o valor da temperatura em grauscentrgados, ento a temperatura, f , em Fahrenheit dada pela frmula abaixo:

    f =9 c+ 160

    5.

    6. Chico Bento deseja calcular o saldo atual de uma de suas aplicaes financeiras. Paratal, ele conhece o saldo anterior ao reajuste e sabe que este saldo foi reajustado em 1%.Escreva um algoritmo para calcular e escrever o saldo atual da aplicao de Chico Bento.

    7. Chico Bento est preocupado com o consumo de energia de sua residncia e deseja escr-ever um algoritmo para ajud-lo a controlar suas despesas com energia. Chico Bento sabeque 100 quilowatts de energia equivalem a um stimo do salrio mnimo. Ento, dados ovalor do salrio mnimo e a quantidade de quilowatts gasta na residncia de Chico Bento,calcule e escreva (a) o valor em reais de cada quilowatt, (b) o valor em reais a ser pagoe (c) o novo valor em reais a ser pago se Chico Bento ganhar um desconto de 10% porpagar em dia.

    43

  • 44

    8. Chico Bento possui um carro que faz, emmdia, 12 km com um litro de gasolina. Ele real-izou uma viagem com seu carro e est interessado em saber quantos litros de combustvelo carro consumiu. Para tal, ele dispe de duas informaes: o tempo gasto dirigindo ea velocidade mdia do carro. Escreva um algoritmo para calcular quantos litros de com-bustvel o carro de Chico Bento consumiu.

    9. Escreva um algoritmo para ler um valor de hora, em termos de trs nmeros inteiros,hora, minuto e segundos, e calcular e escrever o nmero de segundos que se passou desdeo comeo do dia at o valor da hora que foi fornecido como entrada para o algoritmo.

    10. Dada uma centena, isto , um nmero inteiro positivo da forma xyz tal que x um dgitode 1 a 9 e tanto y quanto z so dgitos de 0 a 9, calcule e escreva a unidade do nmerodado.

    Por exemplo, se o nmero dado igual a 147, a soluo do problema 7. Observe quea entrada do problema consiste de um nico valor, que um nmero inteiro positivorepresentando uma centena, e no os trs dgitos da centena.

    DIM0320 - 2011.1 - DIMAP/UFRN PROF. MARCELO FERREIRA SIQUEIRA

  • AULA 10

    PRIMEIRA AVALIAO

    Questo 1) [2 pontos]

    Escreva as expresses abaixo usando a sintaxe da linguagem Portugol da ferramenta VI-SUALG:

    (a)a2

    (b c)2 +b2

    (c a)2(b)

    x y2 x + 3

    2 x2

    3

    Assuma que as letras a, b, c, x e y so variveis que tomam valores no conjunto dos reais.

    Soluo:

    45

  • 46

    Questo 2) [2 pontos]

    Resolva a expresso aritmtica abaixo de acordo com as regras de precedncia da lin-guagem Portugol da ferramenta VISUALG e indique a ordem de ocorrncia da aplicaode cada operador:

    (2%5 + 23) ((3 + 9 \ 2) + 13 / (7 + 6) 3)

    Soluo:

    DIM0320 - 2011.1 - DIMAP/UFRN PROF. MARCELO FERREIRA SIQUEIRA

  • 47

    Questo 3) [1 ponto]

    Classifique cada um dos valores abaixo de acordo com o seu tipo (inteiro, real, lgico oucaractere) na linguagem Portugol da ferramenta VISUALG; isto , indique um desses 4tipos:

    (a) "-3.5"

    (b) "pi"(c) "falso"

    (d) 5.0

    (e) 59

    Soluo:

    DIM0320 - 2011.1 - DIMAP/UFRN PROF. MARCELO FERREIRA SIQUEIRA

  • 48

    Questo 4) [1 ponto]

    Para cada um dos nomes abaixo, determine se ele pode ou no ser usado como nome devarivel na linguagem Portugol da ferramenta VISUALG e escreva o porqu de poder ouno:

    (a) _

    (b) A&a

    (c) "nome"

    (d) a-b(e) var

    Soluo:

    DIM0320 - 2011.1 - DIMAP/UFRN PROF. MARCELO FERREIRA SIQUEIRA

  • 49

    Questo 5) [2 pontos]

    Chico Bento deseja construir uma escola onde estudaro 1000 crianas de uma cidade Ae 500 crianas de uma cidade B. H uma estrada em linha reta que liga a cidade A cidade B. A escola ser construda na beira dessa estrada a 14 da distncia entre A e B nosentido deA para B. Chico Bento gostaria de saber a soma total de quilmetros que todasas crianas devem percorrer para ir de sua cidade escola. Ento, escreva um algoritmopara ler o comprimento, l, em metros, da estrada que liga a cidade A cidade B e calculare escrever, como sada, a quantia, em quilmetros, que Chico Bento deseja determinar.

    Soluo:

    DIM0320 - 2011.1 - DIMAP/UFRN PROF. MARCELO FERREIRA SIQUEIRA

  • 50

    Questo 6) [2 pontos]

    Escreva um algoritmo para ler um nmero inteiro positivo, n, com exatamente quatroalgarismos e escrever como sada a soma dos algarismos da dezena e da centena. Porexemplo, se n = 1234, ento o algoritmo deve escrever 5 como sada, que igual somado algarismo 3 (dezena) e do algarismo 2 (centena).

    Soluo:

    DIM0320 - 2011.1 - DIMAP/UFRN PROF. MARCELO FERREIRA SIQUEIRA

  • AULA 11

    CORREO DA PRIMEIRA AVALIAO

    Questo 1) [2 pontos]

    Escreva as expresses abaixo usando a sintaxe da linguagem Portugol da ferramenta VI-SUALG:

    (a)a2

    (b c)2 +b2

    (c a)2(b)

    x y2 x + 3

    2 x2

    3

    Assuma que as letras a, b, c, x e y so variveis que tomam valores no conjunto dos reais.

    Soluo:

    (a) A expresso em Portugol :

    a * a / ( ( b - c ) * ( b - c ) ) + b * b / ( ( c - a ) * ( c - a ) )

    (b) A expresso em Portugol :

    x * y / ( 2 * x ) + 3 * 3 - x * x / 3

    51

  • 52

    Questo 2) [2 pontos]

    Resolva a expresso aritmtica abaixo de acordo com as regras de precedncia da lin-guagem Portugol da ferramenta VISUALG e indique a ordem de ocorrncia da aplicaode cada operador:

    (2%5 + 23) ((3 + 9 \ 2) + 13 / (7 + 6) 3)

    Soluo:

    (2%5 + 23) ((3 + 9 \ 2) + 13 / (7 + 6) 3) =(2 + 23) ((3 + 9 \ 2) + 13 / (7 + 6) 3) =

    25 ((3 + 9 \ 2) + 13 / (7 + 6) 3) =25 ((3 + 9 \ 2) + 13 / 13 3) =

    25 ((3 + 9 \ 2) + 1.0 3) =25 ((3 + 9 \ 2) + 3.0) =

    25 ((3 + 4) + 3.0) =25 (7 + 3.0) =

    25 10.0 =250.0

    A ordem de aplicao dos operadores pode ser deduzida da avaliao acima, mas estexplicitamente indicada na expresso abaixo atravs de nmeros ao lado dos operadoresaritmticos:

    (2%1 5 +2 23) 9 ((3 +7 9 \6 2) +8 13 /4 (7 +3 6) 5 3)

    DIM0320 - 2011.1 - DIMAP/UFRN PROF. MARCELO FERREIRA SIQUEIRA

  • 53

    Questo 3) [1 ponto]

    Classifique cada um dos valores abaixo de acordo com o seu tipo (inteiro, real, lgico oucaractere) na linguagem Portugol da ferramenta VISUALG; isto , indique um desses 4tipos:

    (a) "-3.5"

    (b) "pi"(c) "falso"

    (d) 5.0

    (e) 59

    Soluo:

    (a) caractere

    (b) caractere

    (c) caractere

    (d) real

    (e) inteiro

    DIM0320 - 2011.1 - DIMAP/UFRN PROF. MARCELO FERREIRA SIQUEIRA

  • 54

    Questo 4) [1 ponto]

    Para cada um dos nomes abaixo, determine se ele pode ou no ser usado como nome devarivel na linguagem Portugol da ferramenta VISUALG e escreva o porqu de poder ouno:

    (a) _

    (b) A&a

    (c) "nome"

    (d) a-b(e) var

    Soluo:

    (a) Sim, pois o nome composto por um nico caractere, o underscore, que permitidocomo primeiro smbolo de um nome de varivel.

    (b) No, pois o smbolo & no pode ser usado em nomes de variveis.

    (c) No, pois nomes de variveis no possuem aspas duplas.

    (d) No, pois o smbolo - no pode ser usado em nomes de variveis.

    (e) No, pois nomes de variveis no podem ser palavras reservadas.

    DIM0320 - 2011.1 - DIMAP/UFRN PROF. MARCELO FERREIRA SIQUEIRA

  • 55

    Questo 5) [2 pontos]

    Chico Bento deseja construir uma escola onde estudaro 1000 crianas de uma cidade Ae 500 crianas de uma cidade B. H uma estrada em linha reta que liga a cidade A cidade B. A escola ser construda na beira dessa estrada a 14 da distncia entre A e B nosentido deA para B. Chico Bento gostaria de saber a soma total de quilmetros que todasas crianas devem percorrer para ir de sua cidade escola. Ento, escreva um algoritmopara ler o comprimento, l, em metros, da estrada que liga a cidade A cidade B e calculare escrever, como sada, a quantia, em quilmetros, que Chico Bento deseja determinar.

    Soluo:

    Algoritmo 11.1: Soluo da questo 5.

    1 algoritmo "questao 5"2 var

    3 l , distot : real4 inicio5 escreva( "Entre o comprimento, em metros, da estrada ligando A a B:" )6 leia( l )7 distot = 0.625 * l ;8 escreva( "A distancia total, em Km, e:" , distot )9 fimalgoritmo

    DIM0320 - 2011.1 - DIMAP/UFRN PROF. MARCELO FERREIRA SIQUEIRA

  • 56

    Questo 6) [2 pontos]

    Escreva um algoritmo para ler um nmero inteiro positivo, n, com exatamente quatroalgarismos e escrever como sada a soma dos algarismos da dezena e da centena. Porexemplo, se n = 1234, ento o algoritmo deve escrever 5 como sada, que igual somado algarismo 3 (dezena) e do algarismo 2 (centena).

    Soluo:

    Algoritmo 11.2: Soluo da questo 6.

    1 algoritmo "questao 6"2 var

    3 n , d, c, soma : inteiro4 inicio5 escreva( "Entre um numero inteiro de 1000 a 9999:" )6 leia( n )7 d

  • AULA 12

    ESTRUTURAS CONDICIONAIS - PARTE 1

    12.1 Motivao

    At o presente momento, todos os algoritmos que vimos podem ser vistos como uma se-qncia de comandos que so executados na ordem em que definida pela seqncia. Neste aula,veremos um comando que nos permite bifurcar a seqncia de comandos de um algoritmo.Com isso, poderemos criar trechos de algoritmos que so mutuamente exclusivos com respeito execuo. Isto , um trecho executado se, e somente se, outro trecho no executado.

    Antes de apresentarmos o comando condicional, apresentamos um problema que justificaa existncia de tal comando. Considere o problema de escrever um algoritmo para ler nome ealtura de duas pessoas e produzir como sada o nome da pessoamais alta. Vamos assumir queas pessoas possuam alturas distintas. Um algoritmo incompleto para o problema mostradoem 12.1.

    Algoritmo 12.1: Algoritmo para determinar a mais alta de duas pessoas.

    1 algoritmo "Pessoa mais alta - incompleto"2 var

    3 nome1, nome2 : caractere4 alt1 , alt2 : real5 inicio6 escreva( "Entre com o nome da primeira pessoa: " )7 leia( nome1 )8

    9 escreva( "Entre com a altura da primeira pessoa: " )10 leia( alt1 )11

    12 escreva( "Entre com o nome da segunda pessoa: " )13 leia( nome2 )14

    15 escreva( "Entre com a altura da segunda pessoa: " )16 leia( alt2 )17

    18 // Escreva o nome da pessoa de maior altura19 fimalgoritmo

    Tudo que precisamos fazer para concluir o Algoritmo 12.1 escrever sua sada. De fato,

    57

  • 12.2 COMANDO SE-ENTAO-SENAO-FIMSE 58

    se a primeira pessoa for mais alta do que a segunda, ento podemos usar a seguinte linha decdigo:

    escreva( nome1 , " e mais alta do que " , nome2 )Caso contrrio, podemos usar a linha

    escreva( nome2 , " e mais alta do que " , nome1 )O problema que no sabemos qual das duas linhas acima deve ser inserida no algoritmo

    antes de lermos e compararmos as duas alturas. Em outras palavras, o algoritmo deve deter-minar qual das duas linhas acima deve ser escrita durante a sua execuo. Esta uma situaode excluso mtua de dois comandos, pois somente um deles pode ser escrito. No entanto, atagora, no aprendemos nenhum comando que nos permita escrever um algoritmo que executeum comando em detrimento da execuo de outro. Sem tal comando, no temos como concluiro algoritmo.

    12.2 Comando se-entao-senao-fimse

    A linguagem Portugol possui o seguinte comando condicional:

    se expresso lgica entaocomando1comando2...comandon

    senaocomando1comando2...comandom

    fimse

    O comando se-entao-senao-fimse contm duas sees, cada uma das quais possui um oumais comandos. A primeira delas a que se situa entre o entao e o senao. A segunda a quese situa entre o senao e o fimse. As sees so mutuamente exclusivas, o que significa que uma executada se, e somente se, a outra no executada. A seo a ser executada depende dovalor lgico da expresso lgica que se situa entre o se e o ento. Por enquanto, assuma queuma expresso lgica uma expresso relacional (veja Aula 11). Na aula seguinte, veremosexpresses lgicas mais gerais. Se a expresso lgica resultar em o valor verdadeiro, a primeiraseo executada. Caso contrrio, isto , se ela avaliar para o valor falso, a segunda seo executada.

    importante ressaltar que independente da seo de cdigo que for executada, o fluxo deexecuo do algoritmo segue para o primeiro comando aps o se-ento-seno-fimse assim queo ltimo comando da seo for executado. Isto , o comando condicional bifurca o fluxo deexecuo, mas aps o comando condicional ser executado, o programa segue com seu fluxoseqencial nico que continua com o primeiro comando encontrado aps o comando condi-cional.

    DIM0320 - 2011.1 - DIMAP/UFRN PROF. MARCELO FERREIRA SIQUEIRA

  • 12.2 COMANDO SE-ENTAO-SENAO-FIMSE 59

    O comando se-ento-seno-fimse pode ser utilizado para completar o algoritmo quecomeamos a escrever na seo anterior. Em particular, o trecho que falta pode ser escritocomo segue

    se alt1 > alt2 entaoescreva( nome1 , " e mais alta do que " , nome2 )

    senao

    escreva( nome2 , " e mais alta do que " , nome1 )fimse

    De fato, a expresso lgica,

    alt1 > alt2,

    avalia para o valor verdadeiro se, e somente se, a altura da primeira pessoa maior do quea da segunda. Caso contrrio, sabemos que a altura da primeira pessoa no maior do quea da segunda. Mas, como assumimos que as alturas so distintas, se a expresso relacionalresultar em falso, ento saberemos que a segunda pessoa mais alta do que a primeira. OAlgoritmo 12.2 o Algoritmo 12.1 acrescido do comando se-entao-senao-fimse que gera a sadaesperada.

    Algoritmo 12.2: Algoritmo para determinar a mais alta de duas pessoas.

    1 algoritmo "Pessoa mais alta - primeira versao"2 var

    3 nome1, nome2 : caractere4 alt1 , alt2 : real5 inicio6 escreva( "Entre com o nome da primeira pessoa: " )7 leia( nome1 )8

    9 escreva( "Entre com a altura da primeira pessoa: " )10 leia( alt1 )11

    12 escreva( "Entre com o nome da segunda pessoa: " )13 leia( nome2 )14

    15 escreva( "Entre com a altura da segunda pessoa: " )16 leia( alt2 )17

    18 se alt1 > alt2 entao19 escreva( nome1 , " e mais alta do que " , nome2 )20 senao

    21 escreva( nome2 , " e mais alta do que " , nome1 )22 fimse23 fimalgoritmo

    DIM0320 - 2011.1 - DIMAP/UFRN PROF. MARCELO FERREIRA SIQUEIRA

  • 12.3 ANINHAMENTO DE COMANDOS CONDICIONAIS 60

    12.3 Aninhamento de comandos condicionais

    Alguns problemas podem requerer o aninhamento de comando