Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Lógica de Programação, Notas de estudo de Matemática Computacional

Curso de introdução à lógica de Programação. Assuntos: variáveis, operadores, laços, vetores.

Tipologia: Notas de estudo

2012

Compartilhado em 12/01/2012

vinicius-10
vinicius-10 🇧🇷

4.7

(3)

11 documentos

1 / 19

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
ogica de Programa¸ao
Vinicius A. de Souza1
10 de janeiro de 2012
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13

Pré-visualização parcial do texto

Baixe Lógica de Programação e outras Notas de estudo em PDF para Matemática Computacional, somente na Docsity!

L´ogica de Programa¸c˜ao

Vinicius A. de Souza^1

10 de janeiro de 2012

(^1) Contato: [email protected]

Sum´ario

  • 1 Organiza¸c˜ao dos computadores
  • 2 L´ogica de programa¸c˜ao
  • 3 Vari´aveis
    • 3.1 Tipos de dados
  • 4 Exerc´ıcios
  • 5 Representa¸c˜ao de algoritmos
  • 6 Desenvolvimento de algoritmos
  • 7 Diagrama de fluxo
  • 8 Exerc´ıcios
  • 9 O Pseudo-c´odigo
  • 10 Opera¸c˜oes l´ogicas
    • 10.1 Controle de fluxo
    • 10.2 Operadores relacionais e l´ogicos
  • 11 Exerc´ıcios
  • 12 Estruturas de repeti¸c˜ao
  • 13 La¸co determinado
  • 14 Exerc´ıcios
  • 15 Vetores
    • 15.1 Carregando e imprimindo um vetor
  • 16 Exerc´ıcios
  • 17 Estrutura de repeti¸c˜ao indeterminada
  • 18 Exerc´ıcios
  • 19 Exerc´ıcios Finais

Considere agora o problema de somar dois valores num´ericos. Podemos escrever o seguinte algoritmo para resolver este problema:

Passo 1: Obtenha dois n´umeros, que chamaremos de N1 e N2; Passo 2: Calcule N3 = N1 + N2; Passo 3: Exiba o resultado N3.

Perceba que o algoritmo acima simplesmente define uma sequˆencia de passos que devem ser executados para que consigamos somar dois n´umeros e exibir o resultado desta soma. Perceba tamb´em que tal algoritmo possui um in´ıcio e um fim determinados. Esta ´e uma outra importante caracter´ıstica dos algoritmos:

Defini¸c˜ao 2 Um algoritmo deve resolver um problema em um n´umero finito de passos.

3 Vari´aveis

Definiremos inicialmente como vari´avel um dado necess´ario para resolver um problema. Voltando ao algoritmo que resolve o problema de passar manteiga no p˜ao de forma, temos que, para resolver este problema, ´e necess´ario que te- nhamos dispon´ıveis a manteiga, o p˜ao e uma faca. Portanto, estes itens s˜ao vari´aveis do nosso algoritmo.

Considere agora o algoritmo que resolve o problema de somar dois n´umeros. Temos que os dados necess´arios para resolver este problema s˜ao dois n´umeros N1 e N2, e n˜ao mais objetos tang´ıveis. Computacionalmente, necessitamos ar- mazenar estes dados na mem´oria do computador para que consigamos realizar opera¸c˜oes com eles. Assim, as vari´aveis agora passam a ser espa¸cos de mem´oria do computador que reservamos. Os nomes N1 e N2 passam a ser referˆencias para estes espa¸cos de mem´oria.

Isto nos permite introduzir outra defini¸c˜ao importante:

Defini¸c˜ao 3 Uma vari´avel ´e uma referˆencia para uma posi¸c˜ao de mem´oria do computador e se apresenta como um dado necess´ario para a resolu¸c˜ao de determinado problema.

E f´^ ´ acil imaginar a mem´oria do computador como uma esp´ecie de gavetas onde guardamos nossos valores. Para acessar estes valores, usamos um nome associado a tais gavetas:

Posi¸c˜ao (endere¸co) Conte´udo Vari´avel H5555 2 N H5556 4.556 Aux H H5558 maria nom H5559 trg H5560 6 N

Perceba que podemos ter diferentes valores dentro da mem´oria do computa- dor. Perceba tamb´em que, para algumas posi¸c˜oes de mem´oria, existem nomes (vari´aveis) associados. Por exemplo, definimos as vari´aveis N1 e N2.

Suponha, por exemplo, que nosso algoritmo realiza o c´alculo N3 = N1 + N2. Isto significa que estamos realizando o c´alculo 2 + 6 (veja a tabela acima) e armazenando o resultado (igual a 8) em uma posi¸c˜ao da mem´oria do computador que chamaremos de N3. Veja como fica a mem´oria do computador agora:

Posi¸c˜ao (endere¸co) Conte´udo Vari´avel H5555 2 N H5556 4.556 Aux H H5558 maria nom H5559 trg H5560 6 N H5561 8 N

3.1 Tipos de dados

Toda vari´avel possui um tipo de de dados espec´ıfico. Um tipo de dados corres- ponde a natureza intr´ınseca ao dado. Por exemplo, voltandoa tabela acima, temos que N1 ´e uma vari´avel num´erica e nom ´e uma vari´avel do tipo texto.

Quando criamos uma vari´avel para ser utilizada em um algoritmo, estamos reservandos um espa¸co de mem´oria. Este espa¸co possui um tamanho determi- nado pelo tipo de dados da vari´avel. A princ´ıpio (enquanto estivemos estudando l´ogia de programa¸c˜ao), quando for necess´ario especificar o tipo de dados da vari´avel, poderemos definir os tipos texto e num´erico.

4 Exerc´ıcios

  1. Com base no modelo de constru¸c˜ao de algoritmos apresentado nos proble- mas iniciais, construa algoritmos para resolver os seguintes problemas:

(a) Um senhor est´a em uma das margens de um rio com uma raposa, uma d´uzia de galinhas e um saco de milho. O senhor pretende atravessar o rio com suas cargas, em um barco que s´o comporta o senhor e uma das cargas. Evidentemente, o senhor n˜ao pode deixar em uma das margens, sozinhos, a raposa e a galinha, nem a galinha e o milho. (b) Suponha que vocˆe possua ´agua ilimitada. Como obter exatamente uma medida de 4 litros de ´agua dispondo apenas de dois recipientes com capacidades de 3 litros e 5 litros respectivamente? (c) O jogo conhecido como Torre de Han´oi consiste de trˆes torres, as quais podemos chamar de origem, destino e auxiliar e um conjunto de n discos de diˆametros diferentes, colocados na torre origem na or- dem decrescente dos seus diˆametros. O objetivo do jogo ´e, movendo um ´unico disco de cada vez e n˜ao podendo colocar um disco sobre

Passo 3: Se o resto da divis˜ao feita no Passo 2 for zero, exiba a mensagem O n´umero ´e par. Caso contr´ario, exiba a mensagem O n´umero ´e ´ımpar.

Atividade: Mostre que o algoritmo acima est´a correto atrav´es de um teste de mesa.

O Passo 1 do algoritmo acima, nos permite definir o conceito de atribui¸c˜ao. Quando colocamos Obtenha o n´umero x, estamos, na verdade, criando uma vari´avel, isto, ´e, reservando um espa¸co de mem´oria e definindo o nome x para ter acesso aos valores alocados nesta posi¸c˜ao de mem´oria. Podemos definir uma atribui¸c˜ao utilizando :=, uma seta para a esquerda ou at´e mesmo sinal =. A fim de evitar confus˜oes, vamos criar uma defini¸c˜ao:

Defini¸c˜ao 4 As atribui¸c˜oes ser˜ao indicadas pelo sinal := e as compara¸c˜oes ser˜ao indicadas pelo sinal =.

7 Diagrama de fluxo

Um diagrama de fluxo (ou simplemente fluxograma) ´e uma forma padroni- zada de se escrever algoritmos utilizando elementos gr´aficos - s´ımbolos. Cada s´ımbolo possui um significado espec´ıfico que auxilia o desenvolvedor a entender o fluxo (dire¸c˜ao) do processamento.

A princ´ıpio, s˜ao apresentados os s´ımbolos mais utilizados:

Figura 1: S´ımbolos mais comuns utilizados no fluxograma.

Como exemplo de utiliza¸c˜ao do fluxograma, vamos considerar o seguinte problema: Calcular a m´edia de dois valores num´ericos quaisquer. Podemos criar o seguinte algoritmo:

Figura 2: Algoritmo de c´alculo da m´edia de dois valores.

8 Exerc´ıcios

  1. Crie um teste de mesa para o algoritmo apresentado na Figura 2.
  2. Suponha que 1 d´olar equivale a 1,80 reais. Construa um algoritmo utili- zando fluxograma que receba um valor em d´olares e exiba este valor em reais.
  3. Pesquise um outro s´ımbolo utilizado para se construir fluxogramas. Expli- que qual a sua utilidade e crie um algoritmo que demonstre sua aplica¸c˜ao.

9 O Pseudo-c´odigo

O pseudo-c´odigo (tamb´em chamado de portugol, portuguˆes estruturado ou pseudo- linguagem) ´e uma simplifica¸c˜ao da l´ıngua portuguesa que utilizamos para escre- ver algoritmos. Para que esta linguagem fa¸ca sentido, temos que ser bastante

LEIA(N)

SE N mod 2 = 0 ENT ˜AO ESCREVA(“O n´umero ´e par”) SEN ˜AO ESCREVA(“O n´umero ´e ´ımpar”)

FIM-ALGORITMO 2

Perceba que o comando SE verifica se uma dada condio foi satisfeita ou n˜ao. Caso ela seja satisfeita, seu algoritmo ´e redirecionado para o comando ap´os o ENT AO associado ao comando SE. No algoritmo acima, por exemplo, verifica-˜ mos se o resto da divis˜ao por 2 ´e igual a 0. Se esta verifica¸c˜ao for verdadeira, ent˜ao escrevemos “O numero ´e par”. Caso a verifica¸c˜ao seja falsa, escrevemos “O numero ´e ´ımpar”.

Utilizando a nota¸c˜ao de fluxograma, podemos reescrever este mesmo algo- ritmo como mostrado na Figura 3.

Figura 3: Algoritmo 2 representado em fluxograma.

10.2 Operadores relacionais e l´ogicos

Para nos auxiliar a realizar desvios l´ogicos dentro dos algoritmos, necessitamos de operadores que realizem compara¸c˜oes entre valores (e entre vari´aveis). De fato, temos duas categorias de operadores: relacionais e l´ogicos. Vale ressaltar que o resultado de uma opera¸c˜ao envolvendo os operadores acima ´e sempre um valor booleano verdadeiro (TRUE) ou falso (FALSE). Veja as tabelas abaixo:

Operadores relacionais

Operador Descri¸c˜ao = igual <> diferente

maior < menor = maior ou igual <= menor ou igual

Operadores l´ogicos

Operador Descri¸c˜ao E / AND Uma express˜ao ´e verdadeira se todas as condi¸c˜oes forem verdadeiras OU / OR Uma express˜ao ´e verdadeira se pelo menos uma condi¸c˜ao for verdadeira NOT Inverte o valor l´ogico de uma express˜ao

11 Exerc´ıcios

  1. Crie um algoritmo em pseudo-c´odigo para converter uma temperatura dada em graus Celsius (C) para graus Fahrenheit (F), sabendo que as temperaturas se relacionam pela f´ormula abaixo:

F =

C + 32 (1)

  1. Construa um algoritmo que, dado dois n´umeros a e b, verifique qual deles ´e o maior.
  2. Sabendo que A = 3, B = 7 e C = 4, verifique se as express˜oes abaixo s˜ao verdadeiras ou falsas:

(a) (A+C) > B (b) B >= (A + 2) (c) C = (B – A) (d) (B + A) <= C

  1. Sabendo que A = 5, B = 4, C = 3 e D = 6, verifique se as express˜oes abaixo s˜ao verdadeiras ou falsas:

(a) (A > C) AND (C <= D) (b) (A+B) > 10 OR (A+B) = (C+D)

Se tiv´essemos que construir um algoritmo para resolver este problema, um mesmo trecho deste algoritmo (o que faz as divis˜oes) poderia ser repetido v´arias vezes. Para fazer esta tarefa, temos definidas as estruturas de repeti¸c˜ao. Uma estrutura de repeti¸c˜ao permite que uma sequˆencia de instru¸c˜oes (comandos) seja executada v´arias vezes, at´e que ou enquanto uma condi¸c˜ao seja satisfeita. As estruturas de repeti¸c˜ao tamb´em s˜ao chamadas de la¸cos ou loops.

Existem dois tipos de la¸cos de repeti¸c˜ao: os la¸cos determinados e os inde- terminados. Como o pr´oprio nome diz, os la¸cos determinados executam uma quantidade fixa de repeti¸c˜oes, independentemente dos comandos que s˜ao repeti- dos. J´a os la¸cos indeterminados executam uma sequˆencia de instru¸c˜oes indefini- damente, at´e que determinada condi¸c˜ao seja satisfeita. Veja os exemplos abaixo:

La¸co determinado: Para saber se o 5 ´e primo, divida-o por 1, 2, 3, 4, 5. Se apenas o 1 e o 5 produzirem divis˜oes exatas, ent˜ao 5 ´e primo.

La¸co indeterminado: Enquanto o usu´ario n˜ao pressionar a tecla ESC, exiba o menu principal.

13 La¸co determinado

Para realizar a repeti¸c˜ao de instru¸c˜oes uma quantidade fixa de vezes, utilizare- mos a estrutura PARA ... AT´E ... FAC¸ A. Esta estrutura necessita de uma vari´avel auxiliar (comumente chamada pelos programadores de i) para contro- lar o n´umero de repeti¸c˜oes. De maneira geral, podemos construir este la¸co como:

PARA i := inicio AT´E fim PASSO incremento FAC¸ A

instru¸c˜oes

Os textos inicio e fim representam valores num´ericos constantes ou vari´aveis. O comando PASSO ´e opcional e incremento indica qual o tamanho do salto que o la¸co dar´a de inicio at´e fim e, se for omitido, os incrementos ser˜ao feitos de 1 em 1 de forma crescente.

Por exemplo, temos que PARA i := 1 AT´E 3 FAC¸ A ESCREVA (“Ol´a”) produz como resultado Ol´a Ol´a Ol´a.

Voltemos agora ao problema do n´umero primo colocado no cap´ıtulo inicial deste texto: Dado um n´umero natural N, verifique se ele ´e primo. Utilizando os comandos SE e PARA, temos condi¸c˜oes de criar um algoritmo para resolver este problema:

ALGORITMO 1 DECLARE N, i, quant NATURAIS

quant := 0 LEIA(N) PARA i := 1 AT´E N FAC¸ A

SE N mod i = 0 ENT ˜AO quant := quant + 1 SE quant = 2 ENT ˜AO ESCREVA(“O n´umero ´e primo”) SEN ˜AO ESCREVA(“O n´umero n˜ao ´e primo”)

FIM-ALGORITMO 1

Vamos fazer um pequeno teste de mesa para testar o algoritmo acima. Con- sidere N = 5. Ent˜ao, temos que:

  • Para i = 1, 5 mod 1 = 0, ent˜ao quant vale 0 + 1 = 1;
  • Para i = 2, 5 mod 2 = 1, quant n˜ao ´e modificado;
  • Para i = 3, 5 mod 3 = 2, quant n˜ao ´e modificado;
  • Para i = 4, 5 mod 4 = 1, quant n˜ao ´e modificado;
  • Para i = 5, 5 mod 5 = 0, ent˜ao quant vale 1 + 1 = 2;
  • O la¸co termina quando i atinge o valor de N (5). Como quant = 2, o algoritmo imprime corretamente a mensagem “O n´umero ´e primo”.

14 Exerc´ıcios

  1. Construa o Algoritmo 1 utilizando a nota¸c˜ao de fluxograma. Dica: Pes- quise na internet como representar o la¸co PARA nesta nota¸c˜ao.
  2. Fa¸ca testes de mesa para o Algoritmo 1 supondo N = 7 e depois N = 8.
  3. Construa um algoritmo para calcular o fatorial de um n´umero natural N, sabendo que

N! = N.(N – 1)! 1! = 1 0! = 1

Por exemplo, 6! = 65432*

  1. Fa¸ca um algoritmo que calcule a soma dos N primeiros n´umeros naturais, onde N ´e um natural fornecido pelo usu´ario. Por exemplo, se N = 5, ent˜ao o algoritmo deve calcular 1 + 2 + 3 + 4 + 5.
  2. Fa¸ca um algoritmo que calcule a soma dos n´umeros naturais ´ımpares me- nores ou igual a N, onde N ´e um valor fornecido pelo usu´ario. Por exemplo, se N = 7, ent˜a o algoritmo dever´a calcular 1 + 3 + 5 + 7.
  3. Fa¸ca um algoritmo que calcule a soma dos n´umeros naturais pares menores ou igual a N, onde N ´e um valor fornecido pelo usu´ario. Por exemplo, se N = 7, ent˜a o algoritmo dever´a calcular 2 + 4 + 6.

LEIA(num[i]) PARA i := 0 AT´E 4 FAC¸ A ESCREVA(“Valor: ” + num[i])

FIM-ALGORITMO 1

16 Exerc´ıcios

  1. Construa um algoritmo que receba do usu´ario 8 valores num´ericos e im- prima posteriormente somente os valores pares.
  2. Projeto. Suponha que iremos construir um software matem´atico que trabalhe com opera¸c˜oes entre dois conjuntos A e B. Portanto, temos que realizar opera¸c˜oes b´asicas entre conjuntos, a saber: - Uni˜ao (A ∪ B): Todos os elementos de A e todos elementos de B que n˜ao est˜ao em A. - Diferen¸ca (A – B): Todos os elementos de A que n˜ao est˜ao em B. - Interse¸c˜ao (A ∩ B): Todos os elementos que est˜ao em A e em B.

Construa um algoritmo que receba do usu´ario dois vetores A e B (ambos do mesmo tamanho), realize as opera¸c˜oes de conjuntos citadas acima e imprima os vetores resultantes.

  1. Fa¸ca um algoritmo que receba do usu´ario uma sequˆencia de 10 valores e exiba posteriormente o maior valor.
  2. Modifique o algoritmo do exerc´ıcio 3 para exibir o menor valor fornecido.
  3. Para pensar. Fa¸ca um algoritmo que ordene de forma crescente um vetor de 10 n´umeros inteiros fornecidos pelo usu´ario.

17 Estrutura de repeti¸c˜ao indeterminada

Vimos que uma estrutura de repeti¸c˜ao determinada faz com que um certo trecho de instru¸c˜oes seja repetido v´arias vezes, por´em dentro de um n´umero exato de repeti¸c˜oes.

Uma estrutura de repeti¸c˜ao indeterminada tamb´e repete um certo trecho de instru¸c˜oes, por´em, n˜ao sabemos exatamente quando a condi¸c˜ao necess´aria para parar o la¸co ser´a satisfeita. Para realizar a repeti¸c˜ao de instru¸c˜oes uma quantidade indeterminada de vezes, utilizaremos a estrutura ENQUANTO ... FAC¸ A. Esta estrutura ne- cessita que atualizemos a condi¸c˜ao dentro do trecho de c´odigo que est´a sendo repetido. De maneira geral, podemos construir este la¸co como:

ENQUANTO (condi¸c˜ao for verdadeira) FAC¸ A

instru¸c˜oes atualiza condi¸c˜ao

A condi¸c˜ao representa um teste l´ogico, que resulta em verdadeiro ou falso. A atualiza¸c˜ao da condi¸ca ao se refere a algum processamento que temos que fazer de forma que o la¸co n˜a seja executado infinitamente.

Imagine, por exemplo, o seguinte problema: Um aparelho capta sinais de minuto em minuto e grava o valor (n´umero real) deste sinal em um arquivo de texto. Posteriormente, temos que ler este arquivo e calcular a m´edia dos valores dos sinais.

Para resolver este problema, ter´ıamos que projetar um algoritmo para ler um arquivo de dados enquanto houvesse dados para serem lidos. Enquanto esta condi¸c˜ao ´e verdadeira, lemos o dados e realizamos o processamento adequado. Quando a condi¸c˜ao de existˆencia de dados n˜ao for mais satisfeita, ent˜ao paramos a leitura do arquivo. Veja o algoritmo abaixo:

ALGORITMO 1 DECLARE arq ARQUIVO, valor, soma e media REAIS, quant NATURAL

ABRA(arq) LEIA(valor, arq) ENQUANTO (valor ̸= VAZIO) FAC¸ A soma = soma + valor quant = quant + 1 LEIA(valor, arq) FECHE(arq) media = soma / quant ESCREVA(“Media dos valores: ” + media)

FIM-ALGORITMO 1

Uma breve explica¸c˜ao: o trecho ABRA(arq) cria uma referˆencia para um arquivo chamada arq. O trecho LEIA(valor, arq) realiza, ent˜ao, a leitura de um n´umero real do arquivo de texto referenciado por arq e armazena este valor na vari´avel valor. Perceba que, se existir um dado v´alido dentro do arquivo, a vari´avel valor ´e diferente de VAZIO, ent˜ao a execu¸c˜ao ´e direcionada para o la¸co ENQUANTO. Dentro do la¸co ENQUANTO realizamos uma nova leitura com LEIA(valor, arq) e assim se procede, at´e que valor seja VAZIO (ou seja, j´a houve a leitura de todos os dados do arquivo) e a condi¸c˜ao do la¸co n˜ao seja mais satisfeita. Ap´os o la¸co ser finalizado, o algoritmo continua sua execu¸c˜ao com a pr´oxima instru¸c˜ao.

18 Exerc´ıcios

  1. Construa um algoritmo que receba continuamente valores num´ericos na- turais e determine o maior deles at´e que o usu´ario entre com um n´umero negativo. Exiba o maior valor recebido.
  2. Modifique o exerc´ıcio 1 para exibir o menor valor recebido.

cont´em dados de apenas 1 dia (24 horas), construa um algoritmo para ler este arquivo e contabilizar quantos minutos o aparelho gerou dados corrompidos dentro do per´ıodo das 11:00 at´e `as 13:00. Utilize o comando LEIA(min, val, arq) para ler uma linha do arquivo.

Boa sorte!