48
 a .  l .  g .  o .  r .  i .  t .  m .  o .  s lógica aplicada - Prof. Tacla pg( 1/48) arq.: 262181617.doc

Algoritmos

Embed Size (px)

DESCRIPTION

Algoritmos

Citation preview

Exerccios de Equivalncia

a . l . g . o . r . i . t . m . o . s

Sumrio

41. Introduo

2. Variveis52.1. A Memria RAM52.2. Nomeando Variveis62.3. Sintaxe do Comando de Declarao de Variveis62.4. Atribuio de Valores a Variveis62.5. Sintaxe da Atribuio de Valores a Variveis73. ENTRADA e SADA DE DADOS83.1. Sada de Dados83.2. Entrada de Dados84. Operadores Aritmticos105. Comandos de Seleo125.1. Seleo Simples125.2. Seleo Mltipla136. Comandos de Repetio ou Lao166.1. Enquanto/While166.2. Execute ... Enquanto/Do ... While196.3. Para/for207. Matriz de Variveis / Array227.1. Declarao de uma Varivel Matricial227.2. Aplicao238. Estruturas de Dados Heterogneas279. Funes289.1. Aplicao: Converso de temperatura289.2. Criao de funes319.3. Aplicao: Jogo da Velha339.4. Escopo de Variveis409.5. Funes Recursivas4110. Mtricas de Qualidade de Programas4211. Compilador Borland C++ 3.14311.1. Instrues para Editar/Compilar/Executar um Programa4312. Referncias Bibliogrficas44

Lista de Exemplos

5Exemplo 1: declarao e atribuio de valores a variveis.

Exemplo 2: utilizao do comando escreva.8Exemplo 3: utilizao do comando leia.8Exemplo 4: utilizao de operadores aritmticos.10Exemplo 5: utilizao do SE.12Exemplo 6: utilizao do comando MultiplasOpcoes.14Exemplo 7: utilizao do comando Enquanto.16Exemplo 8: utilizao do comando Execute ... Enquanto.19Exemplo 9: utilizao do comando "para".20Exemplo 10: utilizao de variveis matriciais do tipo real.23Exemplo 11: utilizao de variveis matriciais do tipo caracter.23Exemplo 12: rescrevendo o exerccio 4 da seo 6.1.23Exemplo 13: rescrevendo o exemplo anterior.25Exemplo 14: Celsius para Farenheit e vice-versa.28

Lista de Figuras

5Figura 1: representao da RAM como um vetor de bytes

Figura 2: representao da RAM aps a atribuio do valor 10 a varivel i.6Figura 3: representao esquemtica de um vetor de inteiros na memria.22Figura 4: representao esquemtica de um vetor de reais na memria.22Figura 5: representao esquemtica de um varivel matricial bidimensional tipo caracter na memria.22Figura 6: Representao esquemtica da matriz de preos de produtos.24Figura 7: Representao esquemtica da matriz de nomes de produtos.26Figura 8: Funo TransformarParaFarenheit (Caixa Preta)29Figura 9: Funo TransformarParaCelsius (Caixa Preta)29Figura 10: Diagrama de Funes para o problema da converso de temperaturas.29

Lista de Tabelas

5Tabela 1: tipos de dados x tamanho e domnio

Tabela 2: Operadores aritmticos.10Tabela 3: Operadores relacionais.12Tabela 4: Operadores lgicos.12

1. Introduo

Definio: Um algoritmo um conjunto de passos que pode ser executado mecanicamente em uma quantidade finita de tempo e que resolve algum problema.Normalmente, algoritmos so especificados atravs de uma pseudo-linguagem, ou seja, uma linguagem com alguma liberdade de sintaxe e parecida com a linguagem corrente (portugus). Como desejamos executar nossos algoritmos no computador, adotaremos uma linguagem com sintaxe rgida. Estudaremos os elementos que constituem a linguagem que ser utilizada na construo de algoritmos. So eles:

variveis

comandos de entrada e sada

operadores aritmticos

comandos de seleo

comandos de repetio/lao

matrizes de variveis

estruturas de dados hetergeneas

funes

2. Variveis

Na programao, assim como na lgica de predicados, uma varivel pode assumir qualquer valor do seu conjunto domnio. As linguagens de programao contm alguns conjuntos domnio predefinidos os quais denominamos de tipos de dados nativos. Exemplificando:

Exemplo 1: declarao e atribuio de valores a variveis.

1. inteiro i;

2. i = 10;

Linha 1: declarao ou criao de uma varivel do tipo inteiro (um tipo nativo da linguagem) chamada i. Portanto, i pode "teoricamente" assumir qualquer valor do domnio Z.

Linha 2:a varivel i assume ou recebe o valor 10 (comando de atribuio)

Quando uma varivel declarada uma quantidade de memria lhe reservada. A quantidade de memria alocada depende do tipo do dado utilizado. Na linguagem que utilizaremos, um inteiro ocupar 2 bytes. Portanto, poderemos representar inteiros no intervalo [-32.768, 32.767]. Num computador, existe limitao para os valores mximo e mnimo de uma varivel dependente da quantidade de bytes reservado para o tipo da varivel. A tabela seguinte mostra os tipos de dados que faremos uso com os respectivos tamanhos:

Tipotamanho (bytes)domnio

caracter1caracteres (a, b, ..., 1, 2, ..., *, & , $, #, ...)

inteiro2subconjunto de Z

real4subconjunto de R

lgico1V ou F

Tabela 1: tipos de dados x tamanho e domnio

2.1. A Memria RAM

A memria RAM armazena os cdigos executveis dos programas e os dados a eles associados (valores das variveis, constantes e outros necessrios ao funcionamento do programa). De forma esquemtica podemos representar a memria como um vetor de bytes (fig. 1).

(1 byte (

endereo fsico0

1

2

......

n

Figura 1: representao da RAM como um vetor de bytes

Retomando o Exemplo 1, a grosso modo, pediu-se ao compilador para reservar 2 bytes (o tamanho de um dado do tipo inteiro) na memria e identificar estes 2 bytes pelo nome i. Supondo que o compilador reserve a partir do endereo fsico (posio) 3 os 2 bytes necessrios para a varivel i teramos a seguinte situao aps o comando de atribuio i = 10.

(1 byte (

endereo fsico0

1

2

30000 0000

40000 1010

......

n

Figura 2: representao da RAM aps a atribuio do valor 10 a varivel i.

Assim, cada vez que referenciamos a varivel i no algoritmo na verdade estamos fazendo referncia ao contedo das posies 3 e 4 da memria RAM.

2.2. Nomeando Variveis

REGRA 1: D nomes significativos. Para identificar, por exemplo, uma varivel que receber a mdia aritmtica de notas de provas utilize o nome media (sem acento) ao invs de z, x ou k.

Padres para Nomear Variveis

1) primeira letra identifica o tipo de dado: i, c, r , l (minscula)

2) demais palavras iniciam por letra maiscula (alguns programadores preferem separar com "_")

Exemplos:

rMediaFinal, cNomeAluno, iCodigo, r_media_final, c_nome_aluno

2.3. Sintaxe do Comando de Declarao de Variveis

::= ;

::= , |

::= |

::= < caracter_no_esp >|< caracter_no_esp >

::=||-|_

::=0|1|...|9

::= a|...| z| A|...|Z

::= inteiro |real | logico |caracter

Exemplos:

real rAux;

logico lSexoMasc;

inteiro iCont, iSeq;

2.4. Atribuio de Valores a Variveis

Uma varivel pode receber um valor na sua declarao ou em qualquer parte do algoritmo.

Na declarao:

inteiro i = 10;

No algoritmo:

inteiro i;

...

i = 10;

2.5. Sintaxe da Atribuio de Valores a Variveis

::= = ;

::= | ;

...

Obs.: no sero detalhadas as categorias sintticas (expresso aritmtica) e (constantes).

3. ENTRADA e SADA DE DADOS

Normalmente, um algoritmo depender de informaes externas que devero de algum modo ser inseridas no computador. Por exemplo, um programa que emite extrato bancrio precisa que o usurio fornea o nmero da agncia, a conta corrente e a senha. Estes dados podem ser via carto magntico ou teclado. Outros meios de entrada de dados num computador so: disquete, disco rgido, scanner e mouse.

Uma vez que os dados de entrada tenha sido processados mostram-se ou gravam-se os resultados num dispositivo de sada: impressora, monitor de vdeo, discos e etc. Os programas de extrato bancrio imprimem o saldo da conta-corrente e os lanamentos efetuados.

Nesta seo, so apresentados os comandos que permitem fazer entrada de dados pelo teclado e sada via monitor de vdeo.

3.1. Sada de Dados

Sintaxe:::=escreva ""; | escreva ;

::=|

::=||

::=~|!|@|#|...

::=0|1|...|9

::= a|...| z |A|...|Z

Semntica:Escreve o texto ou o resultado de uma expresso aritmtica no monitor de vdeo.

Exemplo 2: utilizao do comando escreva.

1. // Programa: saida.cpp

linha de comentrio2. // Autor :

linha de comentrio3. #include "tradutor.h" traduz comandos de portugus para c++4. programa sempre segue o include acima5. inicio incio da parte principal do programa6. inteiro iNrAluno;

7. escreva "Digite o numero do aluno";

8. fim fim da parte principal do programa.3.2. Entrada de Dados

Sintaxe:::=leia ;

::= j definido em 2.3

Semntica:Obtm informao do teclado e coloca o valor digitado na posio de memria identificada pela varivel .

Exemplo 3: utilizao do comando leia.

9. // Programa: entrada.cpplinha de comentrio10. // Autor :

linha de comentrio11. #include "tradutor.h" traduz comandos de portugus para c++12. programa

sempre segue o include acima13. inicio incio da parte principal do programa14. inteiro iNrAluno;

15. escreva "Digite o numero do aluno";

16. leia iNrAluno;

17. fim fim da parte principal do programa.Exerccio:

Altere o algoritmo acima para mostrar o valor digitado aps a seguinte mensagem:

"Voce digitou o nmero: "

Obs.: utilize os caracteres \n num texto para fazer o cursor mudar de linha (retorno de carro e mudana de linha).

4. Operadores Aritmticos

Os operadores mais utilizados so mostrados na tabela seguinte:

Operador

+Adio

-Subtrao

*Multiplicao

/Diviso

%Mdulo (Resto da diviso)

Tabela 2: Operadores aritmticos.Exemplo 4: utilizao de operadores aritmticos.

18. // Programa: media.cpp

19. // Autor :

20. #include "tradutor.h"

21. programa

22. inicio

23. real rNota1, rNota2;

24. escreva "\nDigite a primeira nota:";

25. leia rNota1;

26. escreva "\nDigite a Segunda nota:";

27. leia rNota2;

28. escreva "\nMedia calculada: ";

29. escreva (rNota1 + rNota2) / 2;

30. fim

Exerccios:

1. Faa um algoritmo que transforme uma velocidade fornecida em m/s pelo usurio para Km/h. Para tal, multiplique o valor em m/s por 3,6.

31. #include "tradutor.h"

32. programa

33. inicio

34. real rVelMS;

35. escreva "Digite velocidade em m/s: ";

36. leia rVelMS;

37. escreva "\nVelocidade m KM/H: ";

38. escreva rVelMS * 3.6;

39. fim 2. Faa um algoritmo para calcular a nota semestral de um aluno. A nota semestral obtida pela mdia aritmtica entre a nota de 2 bimestres. Cada nota de bimestre composta por 2 notas de provas. Faa um desenho esquemtico da memria RAM (vide fig. 1 e 2) com as variveis que voc criou. Mostre, neste desenho, o contedo (o valor) de cada varivel aps a execuo do programa.

40. #include "tradutor.h"

41. programa

42. inicio

43.

real rNota1, rNota2, rBim1, rBim2;

44.

escreva "Bimestre 1\n";

45.

escreva "==========\n";

46.

escreva "Nota 1: ";

47.

leia rNota1;

48.

escreva "\nNota 2: ";

49.

leia rNota2;

50.

rBim1 = (rNota1 + rNota2) / 2;

51.

escreva "\nNota primeiro bimestre: ";

52.

escreva rBim1;

53.

escreva "\n\nBimestre 2\n";

54.

escreva "===========\n";

55.

escreva "Nota 1: ";

56.

leia rNota1;

57.

escreva "\nNota 2: ";

58.

leia rNota2;

59.

rBim2 = (rNota1 + rNota2) / 2; 60.

escreva "\nNota segundo bimestre: ";

61.

escreva rBim2;

62.

escreva "\n\nNota semestral:

63.

escreva (rBim1 + rBim2) / 2;

64. fim

Desenho esquemtico da memria aps a seguinte rodada:

Bimestre 1

==========

Nota 1: 8.5 (8.5 foi digitado pelo usurio)Nota 2: 7.5 (7.5 foi digitado pelo usurio)

Nota primeiro bimestre: 8 (calculado pelo programa)Bimestre 2

===========

Nota 1: 8 (8 foi digitado pelo usurio)Nota 2: 6 (7 foi digitado pelo usurio)

Nota segundo bimestre: 7 (calculado pelo programa)

Nota semestral: 7.57 (calculado pelo programa)

(1 byte (

endereo fsico

08

1

2

3

46

5

6

7

88

9

10

11

127

13

14

15

5. Comandos de Seleo

A linguagem que estamos estudando comporta os seguintes comandos de seleo: Seleo simples (SE ou IF) e o de Seleo Mltipla (CASE).

5.1. Seleo Simples

O comando de seleo simples (SE) permite que um bloco de comandos seja ou no executado dependendo do resultado de um teste. O teste pode ser uma comparao entre duas variveis, uma varivel e uma constante, uma expresso aritmtica e uma constante e etc. Logicamente, para fazermos testes, tambm chamados de expresses condicionais, precisamos de operadores relacionais e operadores lgicos. A tabela abaixo mostra aqueles que utilizaremos:

Operador Relacional

>Maior