Apostila - Prof. Marcelo (1)

download Apostila - Prof. Marcelo (1)

of 178

Transcript of Apostila - Prof. Marcelo (1)

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    1/178

    DIM0320 - Algoritmos e Programao de Computadores

    (Notas de Aula)

    Prof. Marcelo Ferreira Siqueira

    [email protected]

    DIMAp - CCET - UFRN

    Maro 2011

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    2/178

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

    Texts. A copy of the license is included in the section entitled GNU Free DocumentationLicense.

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    3/178

    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. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245.2 Precedncia de operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

    i

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    4/178

    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. . . . . . . . . . . . . . . . 347.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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5712.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

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    5/178

    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

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    6/178

    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 . . . . . . . . . . . . . . . . . . . . . . . . . . 14423.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

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    7/178

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

    29 Terceira Avaliao 160

    30 Correo da Terceira Avaliao 165

    v

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    8/178

    AULA1

    INFORMAESGERAIS

    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

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    9/178

    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 porP1, P2e P3. As notas dasunidades I, II e III sero as notas obtidas nas provasP1, P2e P3, respectivamente. As datasdas provasP1,P2e P3, assim como a data do exame final, j foram informadas no SIGAAeso 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] 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 PRO F. MARCELOFERREIRASIQUEIRA

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    10/178

    1.2 BIBLIOGRAFIA 3

    alunos tambm tero acesso aos eventuaisslidesutilizados pelo professor durantes as. Tantoas notas de aula quanto os slidessero disponibilizados, na forma de arquivos em formato

    PDF, para downloadno 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 PRO F. MARCELOFERREIRASIQUEIRA

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    11/178

    AULA2

    INTRODUO

    2.1 Algoritmos e problemas computacionais

    A palavra algoritmo tem origem no sobrenome do matemtico, astrnomo, gelogo, ge-grafo e autor persaMohammed 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 deAlgoritmi, 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 um dado problema. Cada instruo

    de 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 emalgoritmoscomputacionais, 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 reaAde um quadradoQde ladol. No ensino mdio, aprendemosque

    A= l2 . (2.1)

    Ento, dado o comprimentol dos lados do quadradoQ, uma forma de resolver o problema

    usar a frmula acima, ou seja, multiplicar o valor de lpor ele prprio. Note que a frmula em(2.1) pode ser usada para calcular a reaAdequalquerquadrado. Tudo o que precisamos saberpara utilizar a frmula para obter a rea Ade 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 ldo lado do quadradoQe, depoisde calcular A, ela deve nos informar o valor de A 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 comprimentoldo lado do quadrado.

    4

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    12/178

    2.1 ALGORITMOS E PROBLEMAS COMPUTACIONAIS 5

    2. Multipliquelporl

    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 est

    bem 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 comprimentoldo lado do quadrado e a sada a reaAdoquadrado.

    O exemplo acima tambm ilustra uma caracterstica importante dos algoritmos computa-

    cionais: eles soagentes transformadoresde dados de entrada em dados de sada. Este processode transformao comumente denominadoprocessamento. Da, o termoprocessamento dedados. No exemplo, o valor del foi processado para gerar o valor deA. 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.

    Entrada Algoritmo SaidaPSfrag replacementsAlgoritmoEntrada

    Sada

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

    Um problema computacional possui vrias ocorrncias (ou instncias). Umaocorrnciadeum 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-primentol 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 ser

    construdo para resolvertodasas possveis ocorrncias de um problema. O algoritmo do nossoexemplo contm instrues para o clculo da rea Ado quadrado para qualquer valor de ldado.

    Um algoritmo ditocorretose 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 lhe

    damos.Quando comeamos a construir algoritmos, umas das habilidades mais importantes

    DIM0320 - 2011.1 - DIMAP/UFRN PRO F. MARCELOFERREIRASIQUEIRA

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    13/178

    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 comoPortugol, que utilizada pelaferramentaV IS UALG , que ser utilizada na disciplina como forma de apoio ao aprendizadode algoritmos.

    Por exemplo, usando a linguagem Portugol da V IS UALG, o algoritmo que vimos na seoanterior para calcular a rea de um quadrado a partir do comprimento de seus lados descritocomo em2.1:

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

    1 algoritmo "Area do quadrado

    2 var lado, area : real

    3 inicio

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

    5 leia ( lado )

    6 area

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    14/178

    2.3 RESOLUO DEPROBLEMAS 7

    Parte do processo de aprendizado de construo de algoritmos dedicada familiarizaocom os aspectos sintticos de alguma linguagem de descrio de algoritmos. Felizmente, as

    linguagens 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

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    15/178

    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 American

    Language(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 uma mquina que manipula 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 comoprogramao. 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 umalinguagem de programao. O termoprograma comumenteempregado para designar o algoritmo em uma linguagem de programao. Entretanto, no hdistino conceitual entre algoritmo e programa1. O Algoritmo2.1escrito em linguagem C mostrado no Programa2.1. Compare os dois!

    Cada modelo de computador possui uma linguagem de 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 PRO F. MARCELOFERREIRASIQUEIRA

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    16/178

    2.4 COMPUTADORES 9

    compiladordeve estar presente no computador. Um compilador para uma determinada lin-guagem de programao realiza a traduo automtica de um programa escrito em uma certa

    linguagem 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 compilaro 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 o

    mouseso 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 computadordenominadomemria(primria ou secundria). Os dados de sada resultantes da execuodo algoritmo pelo computador so apresentados tambm por meio de equipamentos eletrni-cos denominadosperifricos 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-nominadounidade 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 CPU

    pode ser vista como o crebro do computador.

    No mundo dos computadores, voc ouvir as pessoas falarem sobre hardwaree software.Hardware se refere mquina propriamente dita e a todos os perifricos conectados a ela.Softwarese 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 PRO F. MARCELOFERREIRASIQUEIRA

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    17/178

    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 don-simo termo dessa PA.

    (e) Escreva um algoritmo para ler o valor de uma temperatura em graus centrgados eescrever a mesma temperatura em grausFahrenheit. Sec o valor da temperaturaem graus centrgados, ento a temperatura,f, emFahrenheit 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 em

    1%. Escreva um algoritmo para calcular e escrever esse saldo atual.(g) Chico Bento est preocupado com o consumo de energia de sua residncia e deseja

    escrever 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 de10%por pagar em dia.

    (h) Chico Bento possui um carro que faz, em mdia, 12km 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, minutoe 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 formaxyz tal quex umdgito de1a9e tantoyquantozso dgitos de0a9, calcule e escreva a unidade donmero dado.Por exemplo, se o nmero dado igual a 147, a soluo do problema 7. Observe

    que 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 PRO F. MARCELOFERREIRASIQUEIRA

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    18/178

    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 linguagem

    do V IS UALG, 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 PRO F. MARCELOFERREIRASIQUEIRA

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    19/178

    AULA3

    TIPOS DEDADOS EVARIVEIS

    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.

    Otipo de um dadodefine 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 V IS UALG.

    Na nossa descrio, o nome de um tipo escrito no formato tipo, assim como as demaispalavrasreservadasda 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 dgitos0, 1, 2, 3, 4, 5, 6, 7, 8 e 9, tal como em 5, 100e1678. Nmeros negativos so representados com o sinal

    na frente do nmero, tal

    como 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 inteirae umaparte fracionria. Por exemplo, as partes inteira e fracionria do nmeroreal3.141596so3e141596, 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.0se referem ao mesmo nmero (cinco),mas o primeiro do tipo inteiro e o segundo, do tipo real. Assim como os nmeros

    inteiros negativos, nmeros reais negativos so representados com o sinal na frentedo nmero, tal como3.141596.

    12

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    20/178

    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, . . . , 9e 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 depalavravazia, 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.

    Umavarivelpode 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. Onome de uma varivel deve ser nico,

    isto , identificar, de forma nica, a varivel no algoritmo. Otipo de uma variveldefine osvalores que podem ser armazenados na varivel. Ocontedo 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 comodeclarao de varivel.

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

    varnome: tipo

    ondenome o nome da varivel etipo o tipo da varivel.

    Por exemplo, a sentena

    var lado : real

    declara uma varivel de nomeladodo tipo real.

    Podemos declarar mais de uma varivel do mesmo tipo em uma mesma linha. Por exemplo,

    var lado, area : real

    1No discutiremos constantes neste momento.

    DIM0320 - 2011.1 - DIMAP/UFRN PRO F. MARCELOFERREIRASIQUEIRA

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    21/178

    3.2 VARIVEIS 14

    Note que nenhum contedo (isto , valor) foi associado varivel durante a sua declarao.Esta associao denominada definioe deve ser realizada aps a declarao da varivel

    usando umainstruo de leituraou umcomando de atribuio. Vamos detalhar essas duasformas.

    A instruo de leitura tem a forma

    leia (nome)

    ondenome 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 Algoritmo2.1.

    A instruo de atribuio possui a forma

    nome

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    22/178

    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

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    23/178

    3.4 NOMES D E 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. Umapalavra 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 Tabela3.1.

    aleatorio e grauprad passoabs eco inicio pausaalgoritmo enquanto int pi

    arcos 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 senao

    cotan 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 bonitacontm um espao em branco. O nomepi uma palavra reser-vada. O nomefru?tacontm um caractere que no letra, nmero nem sublinhado,?. O nome1xedinicia com um nmero. Com exceo depi, que viola a regra 2, os demais nomes violam aregra 1.

    DIM0320 - 2011.1 - DIMAP/UFRN PRO F. MARCELOFERREIRASIQUEIRA

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    24/178

    3.5 EXERCCIOSRESOLVIDOS 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 nomecarro.

    soluo:

    var carro : caractere

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

    soluo:

    x

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    25/178

    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 PRO F. MARCELOFERREIRASIQUEIRA

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    26/178

    AULA4

    ENTRADA ESADA

    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 deentradaesada. 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 )

    ondelado o nome de uma varivel. Quando a instruo acima executada, o valor lido passaa ser o contedo delado. 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 ovalorda varivel de nomelado.

    interessante frisar que a instruo de escrita no usada apenas para escrever o resultado

    do algoritmo, mas sim para escrever qualquer informao que auxilie a comunicao entre oalgoritmo e o mundo exterior. Por exemplo, comum escrevermos uma mensagemantes 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

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    27/178

    4.2 AESTRUTURA 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 entre

    aspas 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 oumouse.

    4.2 A estrutura de um algoritmo

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

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

    algoritmo

    seguida por um texto que identifica o algoritmo.

    Adeclarao de variveis, que a seo em que as variveis so declaradas, iniciadapela palavra var e seguida por uma ou mais declaraes de variveis. Ocorpo do algoritmo, que contm as instrues que, de fato, fazem o trabalho descrito

    pelo algoritmo.

    O corpo do algoritmo se inicia com a palavra

    inicio

    Alinha 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 branco

    entre uma seqncia de linhas. Essas linhas em branco servem para separar partes doalgoritmo que esto menos relacionadas.

    DIM0320 - 2011.1 - DIMAP/UFRN PRO F. MARCELOFERREIRASIQUEIRA

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    28/178

    4.2 AESTRUTURA DE UM ALGORITMO 21

    O algoritmo pode contercomentrios. Comentrios so linhas no executveis, ou seja,elas no fazem parte do processo de produo da sada do algoritmo e servem apenas

    para nos auxiliar na leitura e entendimento da soluo do algoritmo. As linhas de co-mentrio se iniciam obrigatoriamente com o smbolo //.

    O Algoritmo4.1l 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 saida

    3 //

    4 algoritmo "Leitura e escrita"

    5 var

    6 //

    7 // Secao de declaracao de variaveis

    8 //

    9 num : inteiro

    10 inicio

    11 // Escreve uma mensagem para indicar o que deve ser lido pelo algoritmo

    12 escreva ( "Entre com um numero inteiro: " )

    13

    14 // Realiza a leitura de um numero inteiro e o associa a uma variavel

    15 leia ( num )

    16

    17 // Escreve o valor do numero lido

    18 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 de

    sada em uma mesma linha, separados por um espao e sem a vrgula.

    DIM0320 - 2011.1 - DIMAP/UFRN PRO F. MARCELOFERREIRASIQUEIRA

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    29/178

    4.3 EXERCCIOS RESOLVIDOS 22

    4.3 Exerccios resolvidos

    1. Considere o Algoritmo4.2para 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 palavra

    3 //

    4 algoritmo "Leitura e escrita de numero e palavra"

    5 var

    6 //

    7 // Secao de declaracao de variaveis

    8 //

    9 num : inteiro

    10 pal : caractere

    11 inicio

    12 // Escreve uma mensagem para solicitar um numero

    13 escreva ( "Entre com um numero inteiro: " )

    14

    15 // Realiza a leitura de um numero inteiro e o atribui a uma variavel

    16 leia ( num )

    17

    18 // Escreve uma mensagem para solicitar uma palavra

    19 escreva ( "Entre com uma palavra: " )

    20

    21 // Realiza a leitura de uma palavra e a atribui a uma variavel

    22 leia ( pal )

    23

    24 // Escreve numero e palavra lidos

    25 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 inteiro5 e a palavra algoritmo como entrada para o

    algoritmo, o que o algoritmo escreve como sada?

    soluo:

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

    (b) numepal.

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

    DIM0320 - 2011.1 - DIMAP/UFRN PRO F. MARCELOFERREIRASIQUEIRA

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    30/178

    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 VIS UALGpara executar o algoritmo que voc escreveu para o problemaanterior.

    DIM0320 - 2011.1 - DIMAP/UFRN PRO F. MARCELOFERREIRASIQUEIRA

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    31/178

    AULA5

    EXPRESSESARITMTICAS PARTE1

    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) \ (divisointeira) %(resto aplicado apenas aos valores inteiros).

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

    a + b + c, a b c % 2, e 5 + 3 8 \ 2so todas expresses aritmticasvlidasna 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 + 2quandoa uma varivel ou constante do tipo real,pois existe uma ambigidade em relao ao resultado da operao. No entanto, como veremosmais adiante, podemos definirregras semnticasassociadas 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

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    32/178

    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 53 primeiro e, depois,1 5 % 2, ou podemos dizer que igual a 5se avaliarmos3 % 2primeiro 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 possuemprioridadesassociadas com eles. A op-

    erao associada a um operador com prioridadep sempre executada antesda operao as-sociada a um operador com prioridadeqsempre que p > q. Quandop = 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+eso os operadores de adio e subtrao,respectivamente. A Tabela5.1resume essas prioridades.

    Operador Smbolo Prioridade

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

    adio e subtrao +, mais baixaTabela 5.1: Operadores aritmticos sobre os inteiros e suas prioridades.

    Por exemplo, ema + b + c ,

    a operaoa + 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 operaob c efetuada primeiro e, em seguida, o resto da diviso de b cpor2 calculado.Finalmente, o resto subtrado dea. 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 Algoritmo5.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 Algoritmo5.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 PRO F. MARCELOFERREIRASIQUEIRA

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    33/178

    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 de

    parnteses. 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 antesde serem usados pelos demais operadores. importante destacar que osparnteses devem ocorrer empares(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 inicio

    4 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 operaoa 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 em mente, a expresso acima pode ser imaginada como tendoa forma

    op1 op2 ,onde op1 e op2 so as expresses (ab)e (c % 2). Ento, o que temos uma simples mul-tiplicao de dois valores, op

    1e op

    2. No entanto, para que esta multiplicao seja realizada,

    precisamos dos valoresop1eop2. Para tal,assumimosque o valor,op1, esquerda do operadorde multiplicao,, ser obtido antes do valor, op2, direita dele. Para calcularop1, avaliamosa expresso

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

    c % 2 ,

    que a expresso correspondente ao valorop2. Neste momento, descobrimos que a operaode resto de diviso,c % 2, a segunda operao aritmticarealizada. Neste momento, dispomosdos valoresop1e op2e, portanto, podemos realizar a multiplicao op1 op2, que passa a ser

    DIM0320 - 2011.1 - DIMAP/UFRN PRO F. MARCELOFERREIRASIQUEIRA

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    34/178

    5.3 ALTERAO DE PRIORIDADES 27

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

    (a 1b) 3(c %22)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 : inteiro

    4 inicio

    5 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 valorop1para ser realizada. Ento, considere a expresso corre-spondente aop1:

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

    op3 op4 .

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

    DIM0320 - 2011.1 - DIMAP/UFRN PRO F. MARCELOFERREIRASIQUEIRA

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    35/178

    5.4 AINSTRUO DE ATRIBUIO 28

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

    2 + 3e a prxima a adio

    1 + 2 .

    Em seguida, temos a subtraoop3 op4:(2 + 3) (1 + 2) .

    Depois que a subtrao acima for realizada, o valor op1 se torna conhecido e, consequente-mente, a multiplicaoop1 3pode 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 op2ser conhecido, ou seja, antes da

    expresso3 + (3 2)

    ser avaliada. Assim como fizemos antes, podemos imaginar a expresso acima tendo a forma

    3 + op5 ,

    ondeop5 o valor da expresso, 3 2, entre parnteses. A adio na expresso acima precisado valor op5para ser realizada. Isto significa que a subtrao32 a quinta operao real-izada. Depois dela, a adio3 + op5 realizada, tornando-se a sexta operao realizada. Logoem seguida, o valor op2se torna conhecido, o que possibilita a realizao da stima e ltimaoperao, que a subtrao emop1

    3

    op2. Usando a notao de subscrito, temos a seguinte

    ordem:((2 +13) 3(1 +22)) 43 7(3 +6(3 52)) .

    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 Aula3, aatribuio de um valor a uma varivel pode ser realizada atravs da instruo de leitura leiaou do operador de atribuio

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    36/178

    5.5 EXERCCIOS RESOLVIDOS 29

    5.5 Exerccios resolvidos

    1. Considere a expresso polinomial

    5x3 + 7x2 3x 1 ,

    ondex 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 : inteiro

    4 inicio

    5 escreva( "Entre com o primeiro inteiro: " )

    6 leia( a )

    7

    8 escreva( "Entre com o segundo inteiro: " )

    9 leia( b )

    10

    11 quadrado

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    37/178

    5.6 EXERCCIOS PROPOSTOS 30

    3. Suponha que a linha 11 do Algoritmo5.3seja substituda por

    quadrado

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    38/178

    AULA6

    PROVA DEAVALIAO DECONHECIMENTOPRVIO

    Essa aula ser dedicada aplicao de uma prova de conhecimento prvio. A prova tem porobjetivo avaliar conhecimentos bsicos de matemtica e raciocnio lgico adquiridos no ensinofundamental e mdio, A prova vale1,0ponto. este ponto sersomado nota da primeira prova,que valer 10,0pontos. 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 desempenho

    baixo.

    31

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    39/178

    AULA7

    EXPRESSESARITMTICAS PARTE2

    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 Tabela7.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 baixaTabela 7.1: Operadores aritmticos sobre os reais e suas prioridades.

    Por exemplo, considere a expresso

    3a + 2b

    c a 11 +

    a + b

    2c

    ,

    ondea, b e c so variveis. Na linguagem Portugol, a expresso acima pode ser escrita como

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

    32

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    40/178

    7.2 REGRAS SEMNTICAS 33

    importante notar que todosos parnteses so necessrios para que a expresso, na lin-guagem Portugol, seja equivalente expresso aritmtica dada. Abaixo, indicamos, com

    ndices nos operadores, a ordem em que as operaes da expresso so executadas quandoa expresso avaliada:

    (3.0 1a +32.0 2b) /11(x 10(a 41.0) /9(1.0 +8(a +5b) /7(2.0 6c))) .

    O Algoritmo7.1calcula 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 : real

    4 inicio

    5 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/26/2019 Apostila - Prof. Marcelo (1)

    41/178

    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 real2.5. Na expresso acima, no h nenhuma constante ou varivel do tipo

    real. 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.5comoresultado. Em seguida, a operao2.5 % 2deve ser realizada. Mas, como o operador % nopode atuar sobre nmeros reais, a operao 2.5 % 2no pode ser realizada. Voc poderia imag-inar que o nmero2.5seria 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 V IS UALGacusar um erro setentarmos utilizar esta expresso em um algoritmo (verifique!). Em uma aula futura, veremosumafunoda 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 valoresV er dada pela

    DIM0320 - 2011.1 - DIMAP/UFRN PRO F. MARCELOFERREIRASIQUEIRA

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    42/178

    7.4 EXERCCIOS RESOLVIDOS 35

    frmulaV =

    4

    3 r3 . (7.1)

    O nosso algoritmo deve ler o valor do raio r da esfera, calcular o valor de Ve 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 . Para lidar comsituaes como essa, a linguagem Portugol possui uma palavra reservada, chamada pi, querepresenta a constante. 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 rda esfera. Se a linguagemPortugol no nos fornecesse a constantepi, 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 . 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 volumeVda esfera de raior, 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 volumecomo sada. O algoritmo resultante oAlgoritmo7.2.

    Algoritmo 7.2: Algoritmo para calcular o volume da esfera.

    1 algoritmo "Volume da esfera"

    2 var

    3 raio, volume : real

    4 inicio

    5 escreva( "Entre com o valor do raio da esfera: " )

    6 leia( raio )

    7

    8 volume

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    43/178

    7.5 EXERCCIOS PROPOSTOS 36

    operadores):1

    1 + 1

    1 + a

    .

    Assuma quea 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/31 /2(1 +1a))) .

    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 inicio

    5 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/26/2019 Apostila - Prof. Marcelo (1)

    44/178

    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 VIS UALG.

    DIM0320 - 2011.1 - DIMAP/UFRN PRO F. MARCELOFERREIRASIQUEIRA

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    45/178

    AULA8

    EXPRESSESRELACIONAIS

    8.1 Operadores relacionais

    Umaexpresso relacional, ou simplesmenterelao, uma comparao entre dois valoresde um mesmo tipo. Esses valores so representados na relao atravs de constantes, variveisou expresses aritmticas. A operao de comparao realizada por umoperador relacional.Na linguagem Portugol da ferramenta V IS UALG, temos os operadores relacionais mostradosna Tabela8.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 dea maior do que o de b. Caso contrrio, o resultado o valorlgico falso. Na expresso

    c

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    46/178

    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

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    47/178

    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 bequivalem a perguntar se os caracteres representados por aebso iguais ou distintos, respec-tivamente. Tais expresses so facilmente avaliadas com base nos valores de ae 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 queoutra? Para responder esta per-gunta, vamos primeiro considerar o caso em que os valores de aebso umcaracterecada. 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 linguagem

    Portugol da ferramenta VIS UALG, denominadoASCII1

    , 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 pora menor do que o ndice do caractere representado porbno 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 odeb 4,

    a < b , a > b , a =bresultam nos valores lgicos falso, verdadeiro, falso e verdadeiro, respectivamente, quando soavaliadas.

    O que dizer se pelo menos um deaebcontm uma palavra com mais de um caractere?

    Neste caso, usamos aordem lexicogrficapara 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 bpossua 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= 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 ae bcoincidem nos cinco primeiros caracteres, isto , ambas comeam com o prefixo abaca. Oprximo passo comparar a6com b6. Como podemos ver, a6 igual a t e b6 igual a x.Ento, a6 < b6e a6 b6. Logo, sabemos quea 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 PRO F. MARCELOFERREIRASIQUEIRA

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    48/178

    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 da

    palavra ema. Por exemplo, se o valor de a bola e o de b bolada, ento a palavra ema um prefixo da palavra em be, 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 quem = ne ai = bipara todoi ={1, 2, . . . , k}, ondek = min{n, m}. Mas, neste caso,aebso exatamente a mesma palavra! Por exemplo, se o valor de ambas as variveis, aeb, 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 tipo

    lgico, 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:1 0 % 5 2 5 2 + 1

    soluo:

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

    DIM0320 - 2011.1 - DIMAP/UFRN PRO F. MARCELOFERREIRASIQUEIRA

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    49/178

    8.5 EXERCCIOS PROPOSTOS 42

    2. Suponha quexseja uma varivel do tipo inteiro e considere a relao

    x % 3> 1

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

    soluo:

    O resultado dex % 3 sempre2,1,0,1ou2. Em particular, na ferramenta VIS UALG,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 % 3for igual a2, temos que o valor de xdeve ser2, 5, 8, . . ., ou seja, daforma

    2 + 3 k ,

    para todok

    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 , nomeANA e profissao=medico

    Qual o valor dessas expresses quando a, b,nome eprofissao 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 quexseja uma varivel do tipo real e considere a seguinte expresso relacional:

    x2 4> 5 .

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

    3. Suponha que x seja uma varivel do tipo inteiro. Ento, escreva uma expresso relacional

    em Portugol que tenha valor verdadeiro se, e somente se, o valor de x um nmero mparno-negativo.

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

    a < b ,

    tenha resultado falso.

    DIM0320 - 2011.1 - DIMAP/UFRN PRO F. MARCELOFERREIRASIQUEIRA

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    50/178

    AULA9

    EXERCCIOS PARA APRIMEIRAAVALIAO

    Esta aula ser dedicada ao desenvolvimento de algoritmos relacionados ao contedo daprimeira avaliao. importante que todos vocs tentem resolver os exercciosantesdo 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 VIS UALGpara 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 dos

    nmeros 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 dosnprimeiros 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. Sec o valor da temperatura em grauscentrgados, ento a temperatura,f, emFahrenheit 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%por

    pagar em dia.

    43

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    51/178

    44

    8. Chico Bento possui um carro que faz, em mdia,12 km com um litro de gasolina. Ele real-izou uma viagem com seu carro e est interessado em saber quantos litros de combustvel

    o 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,minutoesegundos, 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 formaxyztal quex um dgitode1 a 9 e tantoy quantoz 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 PRO F. MARCELOFERREIRASIQUEIRA

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    52/178

    AULA10

    PRIMEIRAAVALIAO

    Questo 1)[2 pontos]

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

    (a)a2

    (b c)2 + b2

    (c a)2(b)

    x y2 x + 3

    2 x2

    3

    Assuma que as letrasa,b,c,xeyso variveis que tomam valores no conjunto dos reais.

    Soluo:

    45

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    53/178

    46

    Questo 2)[2 pontos]

    Resolva a expresso aritmtica abaixo de acordo com as regras de precedncia da lin-

    guagem Portugol da ferramenta V IS UALG 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 PRO F. MARCELOFERREIRASIQUEIRA

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    54/178

    47

    Questo 3)[1 ponto]

    Classifique cada um dos valores abaixo de acordo com o seu tipo (inteiro, real, lgico ou

    caractere) na linguagem Portugol da ferramenta VIS UALG; isto , indique um desses 4tipos:

    (a) "-3.5"

    (b) "pi"

    (c) "falso"

    (d) 5.0

    (e) 59

    Soluo:

    DIM0320 - 2011.1 - DIMAP/UFRN PRO F. MARCELOFERREIRASIQUEIRA

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    55/178

    48

    Questo 4)[1 ponto]

    Para cada um dos nomes abaixo, determine se ele pode ou no ser usado como nome de

    varivel na linguagem Portugol da ferramenta V IS UALG e escreva o porqu de poder ouno:

    (a) _

    (b) A&a

    (c) "nome"

    (d) a-b

    (e) var

    Soluo:

    DIM0320 - 2011.1 - DIMAP/UFRN PRO F. MARCELOFERREIRASIQUEIRA

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    56/178

    49

    Questo 5)[2 pontos]

    Chico Bento deseja construir uma escola onde estudaro 1000crianas de uma cidadeA

    e 500crianas de uma cidade B. H uma estrada em linha reta que liga a cidade AcidadeB. A escola ser construda na beira dessa estrada a 14da distncia entreAeBnosentido deAparaB. Chico Bento gostaria de saber a soma total de quilmetros quetodasas crianas devem percorrer para ir de sua cidade escola. Ento, escreva um algoritmopara ler o comprimento,l, emmetros, da estrada que liga a cidadeA cidadeBe calculare escrever, como sada, a quantia, em quilmetros, que Chico Bento deseja determinar.

    Soluo:

    DIM0320 - 2011.1 - DIMAP/UFRN PRO F. MARCELOFERREIRASIQUEIRA

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    57/178

    50

    Questo 6)[2 pontos]

    Escreva um algoritmo para ler umnmero inteiro positivo, n, com exatamente quatro

    algarismos e escrever como sada a soma dos algarismos da dezena e da centena. Porexemplo, sen = 1234, ento o algoritmo deve escrever 5como sada, que igual somado algarismo3(dezena) e do algarismo2(centena).

    Soluo:

    DIM0320 - 2011.1 - DIMAP/UFRN PRO F. MARCELOFERREIRASIQUEIRA

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    58/178

    AULA11

    CORREO DAPRIMEIRAAVALIAO

    Questo 1)[2 pontos]

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

    (a)a2

    (b c)2 + b2

    (c a)2(b)

    x y2 x + 3

    2 x2

    3

    Assuma que as letrasa,b,c,xeyso 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

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    59/178

    52

    Questo 2)[2 pontos]

    Resolva a expresso aritmtica abaixo de acordo com as regras de precedncia da lin-

    guagem Portugol da ferramenta V IS UALG 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 %15 +223)9 ((3 +79 \62) +813 /4(7 +36)5 3)

    DIM0320 - 2011.1 - DIMAP/UFRN PRO F. MARCELOFERREIRASIQUEIRA

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    60/178

    53

    Questo 3)[1 ponto]

    Classifique cada um dos valores abaixo de acordo com o seu tipo (inteiro, real, lgico ou

    caractere) na linguagem Portugol da ferramenta VIS UALG; 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 PRO F. MARCELOFERREIRASIQUEIRA

  • 7/26/2019 Apostila - Prof. Marcelo (1)

    61/178

    54

    Questo 4)[1 ponto]

    Para cada um dos nomes abaixo, determine se ele pode ou no ser usado como nome de

    varivel na linguagem Portugol da ferramenta V IS UALG e escreva o porqu de poder ouno:

    (a) _

    (b) A&a

    (c) "nome"